標題:
binarySearch()
[打印本頁]
作者:
tonyh
時間:
2021-12-27 19:59
標題:
binarySearch()
我們可利用 Arrays 類別或 Collections 類別底下的 binarySearch() 方法,作二分搜尋以快速地找到目標對象的位置或插入點。留意使用二分搜尋法的先決條件是,資料必須是已排序,同時若有重複資料則回傳值可能會不如預期,這時候必須再以迴圈找出精確的位置。
[attach]12586[/attach]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Ch01 {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String raw[];
int len, n[], x;
Ch01() throws Exception
{
while(true){
raw=br.readLine().split(" ");
len=raw.length;
n=new int[len];
for(int i=0; i<len; i++)
n[i]=Integer.parseInt(raw[i]);
x=Integer.parseInt(br.readLine());
int index=Arrays.binarySearch(n, x);
if(index>=0)
{
if(index>0)
{
while(true)
{
index--;
if(n[index]!=x)
{
index++;
break;
}
}
}
}else
{
index=index*-1-1;
}
System.out.println(index);
System.out.println();
}
}
public static void main(String[] args) throws Exception {
new Ch01();
}
}
/*
0 1 2 3 4 5 6 7 8 9 10
1 3 6 6 6 6 6 6 6 7 8
6
1 3 6 6 6 6 6 6 6 7 8
5
1 3 6 6 6 6 6 6 6 7 8
1
*/
複製代碼
作者:
李沛昂
時間:
2021-12-27 20:23
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Ch00 {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String raw[];
int len, n[], x;
Ch00() throws Exception
{
while(true){
raw=br.readLine().split(" ");
len=raw.length;
n=new int[len];
for(int i=0; i<len; i++)
n[i]=Integer.parseInt(raw[i]);
x=Integer.parseInt(br.readLine());
int index=Arrays.binarySearch(n, x);
if(index>=0)
{
if(index>0)
{
while(true)
{
index--;
if(n[index]!=x)
{
index++;
break;
}
}
}
}else
{
index=index*-1-1;
}
System.out.println(index);
System.out.println();
}
}
public static void main(String[] args) throws Exception {
new Ch00();
}
}
複製代碼
作者:
黃宇綸
時間:
2021-12-27 20:25
#include<bits/stdc++.h>
using namespace std;
main()
{
int n;
while(cin>>n) {
vector<int> v;
int x;
for(int i=0;i<n;i++) {
cin>>x;
v.push_back(x);
}
cin>>x;
cout<<lower_bound(v.begin(),v.end(),x)-v.begin()<<"\n";
}
return 0;
}
複製代碼
作者:
黃宇瑄
時間:
2021-12-27 20:30
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Ch00 {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String raw[];
int len, n[], x;
Ch00() throws Exception
{
while(true){
raw=br.readLine().split(" ");
len=raw.length;
n=new int[len];
for(int i=0; i<len; i++)
n[i]=Integer.parseInt(raw[i]);
x=Integer.parseInt(br.readLine());
int index=Arrays.binarySearch(n, x);
if(index>=0)
{
if(index>0)
{
while(true)
{
index--;
if(n[index]!=x)
{
index++;
break;
}
}
}
}else
index=index*-1-1;
System.out.println(index);
System.out.println();
}
}
public static void main(String[] args) throws Exception {
new Ch00();
}
}
複製代碼
作者:
戴嘉禾
時間:
2022-7-1 15:56
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Ch01 {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String raw[];
int len, n[], x;
Ch01() throws Exception
{
while(true){
raw=br.readLine().split(" ");
len=raw.length;
n=new int[len];
for(int i=0; i<len; i++)
n[i]=Integer.parseInt(raw[i]);
x=Integer.parseInt(br.readLine());
int index=Arrays.binarySearch(n, x);
if(index>=0)
{
if(index>0)
{
while(true)
{
index--;
if(n[index]!=x)
{
index++;
break;
}
}
}
}else
{
index=index*-1-1;
}
System.out.println(index);
System.out.println();
}
}
public static void main(String[] args) throws Exception {
new Ch01();
}
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2