二分查找两个大小不同的有序的List集合,找到两个集合第一次出现不同数据的大小,java代码实现
时间: 2024-03-06 15:51:54 浏览: 87
以下是 Java 实现代码:
```
public class BinarySearch {
public static void main(String[] args) {
int[] list1 = {1, 3, 5, 7, 9, 11};
int[] list2 = {1, 3, 5, 7, 8, 11};
int index = findFirstDiff(list1, list2);
if (index == -1) {
System.out.println("两个集合相同");
} else {
System.out.println("第一次出现不同数据的大小为:" + list1[index]);
}
}
public static int findFirstDiff(int[] list1, int[] list2) {
int low = 0;
int high = Math.min(list1.length, list2.length) - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (list1[mid] == list2[mid]) {
low = mid + 1;
} else if (list1[mid] > list2[mid]) {
if (mid == 0 || list1[mid - 1] == list2[mid - 1]) {
return mid;
} else {
high = mid - 1;
}
} else {
if (mid == 0 || list1[mid - 1] == list2[mid - 1]) {
return mid;
} else {
high = mid - 1;
}
}
}
return -1;
}
}
```
该方法利用二分查找的思想,通过比较两个集合的中间元素的大小,来确定两个集合的差异点。在比较的时候,如果中间元素相同,则说明左半部分是相同的,只需要查找右半部分即可;如果中间元素不同,则说明左半部分存在差异,需要继续查找左半部分,直到找到第一个不同的元素。
阅读全文