fzy-blog

java 二分搜索算法

2019-05-24

java 二分搜索算法

有一数组 a[1000]存放了 1000 个数,这 1000 个数取自 1-999, 且只有两个相同的数,剩下的 998 个数不同, 写一个搜索算法找出相同的那个数的值(请用 JAVA 编程实现,注意空间效率和时间效率尽可能优化)。

解答:二分搜索算法 时间复杂度 O(logn)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.util.Arrays;

public class SearchDemo {

/** 被搜索数据的大小 */
private static final int size = 1000;

public static void main(String[] args) {
int[] data = new int[size];
// 添加测试数据
for (int k = 0; k < data.length; k++) {
data[k] = k + 1;
}

data[999] = 567;
result(data);
}

/**
* 调用分搜索算法的方法实现查找相同元素
* @param data
*/
public static void result(int data[]){
Arrays.sort(data);
for (int i = 0; i < data.length; i++) {

int target = data[i];

data[i] = 0;

int result = binaryFind(data, target);

if (result != -1) {

System.out.println("相同元素为:"+data[result]);

break;

}

}

}


/**
* 二分搜索算法实现

*

* @param data 数据集合

* @param target 搜索的数据

* @return 返回找到的数据的位置,返回-1表示没有找到。

*/
public static int binaryFind(int[] data, int target) {

int start = 0;

int end = data.length - 1;

while (start <= end) {

int middleIndex = (start + end) / 2;

if (target == data[middleIndex]) {

return middleIndex;

}

if (target >= data[middleIndex]) {

start = middleIndex + 1;

} else {

end = middleIndex - 1;

}

}

return -1;

}

}
Tags: 算法
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章