二分查找两个有序的List集合,并且list集合中的数据从大到小排列,找到两个集合第一次出现不同数据的大小,java代码实现
时间: 2024-03-03 09:49:09 浏览: 64
以下是Java代码实现二分查找两个有序的List集合中第一次出现不同数据的大小:
```java
public static <T extends Comparable<? super T>> T binarySearchFirstDifferentValue(List<T> A, List<T> B) {
int left = 0, right = A.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
int cmp = A.get(mid).compareTo(B.get(mid));
if (cmp == 0) {
left = mid + 1;
} else if (cmp < 0) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if (left == A.size()) {
return B.get(right);
} else {
return A.get(left).compareTo(B.get(left)) < 0 ? A.get(left) : B.get(left);
}
}
```
其中A和B分别是两个有序的List集合,函数返回第一个不相同的元素值。由于List集合中的元素类型必须实现Comparable接口,因此我们可以使用T extends Comparable<? super T>来表示泛型类型T必须实现Comparable接口。在比较两个元素大小时,我们使用compareTo方法,它会返回一个整数,表示两个元素的大小关系。如果返回值为0,则说明两个元素相等;如果返回值小于0,则说明A[mid]小于B[mid];如果返回值大于0,则说明A[mid]大于B[mid]。
阅读全文