简单算法 二分查找-II(java)
程序员文章站
2023-12-21 21:00:34
...
简单算法 二分查找-II(java)
描述
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1
示例1
输入:
[1,2,4,4,5],4
返回值:
2
说明:
从左到右,查找到第1个为4的,下标为2,返回2
想法:利用二分查找,不过因为其条件是写一个函数搜索 nums 中的第一个出现的target,所以有两种方法,一种是不管中间判断,当nums[mid] == target 时就把mid赋给right,这个时候right就是我们需要返回的值,并且因为循环还在继续,所以当又有nums[mid] == target 时就把mid赋给right,这样一次循环下来right就是第一个出现的target。第二种方法就是判断target == nums[mid],因为是有序的然后通过while循环逐渐找到第一个target
while(mid!=0 && target == nums[mid-1]){
mid--;
}
return mid;
public int search (int[] nums, int target) {
int left = 0 ;
int right = nums.length - 1;
if(right == -1) return -1;
int mid;
while(left < right){
mid = (left + right) / 2;
if(nums[mid] >= target){
right = mid;
}else{
left = mid + 1;
}
}
if(nums[right] == target) return right;
return -1;
}