二分查找,是很常用的一种查找方法,如果是简单的考察二分查找,就太简单了,这里讲的是一种二分查找的略微的升级版。如果要查找的元素有两个,而要求输出下标小的那个元素下标,废话不多说,上代码。
public class NC {
public static void main(String[] args) {
int[] numbs = { 0, 2, 3, 4, 56, 98 };
int target = 3;
System.out.println(search(numbs, target));
}
public static int search(int[] numbs, int target) {
int start = 0;
int end = numbs.length - 1;
int mid = 0;
int index = -1;
while (start <= end) {
mid = (start + end) / 2;
if (numbs[mid] == target) {
// 判断相等后,先不进行输出
index = mid;
// 将end变为mid-1,再度进行循环判断,判断index的左边是否还有相等的元素,如果有的话,循环便可以找到,如果没有最终还是输出index
// 如果在index的右边有相等的元素,就不需要判断了,因为我们要输出的就是第一个出现的相等的元素
end = mid - 1;
// 同理,如果我们想找最后一个出现的相等的元素,将代码改为start = mid +1即可
} else if (numbs[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return index;
}
}
结果如下如图,其实很简单,就是再次利用while循环
。