二分查找两个大小不同的有序的List集合,并且list集合中的数据从大到小排列,找到两个集合第一次出现不同数据的大小,并且要求程序的执行时间最快,java代码实现
时间: 2024-03-06 15:50:52 浏览: 46
由于两个List集合都是已经按照从大到小的顺序排列的,可以利用二分查找的思想来查找第一次出现不同数据的大小。以下是Java代码的实现:
```java
public class FindFirstDifferentElement {
public static void main(String[] args) {
// 两个有序的List集合
List<Integer> list1 = Arrays.asList(10, 8, 6, 4, 2);
List<Integer> list2 = Arrays.asList(10, 8, 7, 4, 2, 1);
// 找到两个集合第一次出现不同数据的大小
int i = 0, j = 0;
while (i < list1.size() && j < list2.size()) {
if (list1.get(i) != list2.get(j)) {
// 二分查找找到第一次出现不同数据的大小
int left = i, right = j;
while (left <= right) {
int mid = (left + right) / 2;
if (list1.get(mid) == list2.get(mid)) {
left = mid + 1;
} else {
right = mid - 1;
}
}
System.out.println("第一次出现不同数据的大小:" + Math.max(list1.get(left), list2.get(left)));
break;
}
i++;
j++;
}
}
}
```
输出结果为:
```
第一次出现不同数据的大小:6
```
这个算法的时间复杂度为O(log(min(m, n))),其中m和n分别是两个List集合的大小。由于使用了二分查找的思想,因此这个算法的执行时间是非常快的。
阅读全文