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); }
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;
}
}
}
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;
}
}
|
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏