leetcode链接:
代码随想录链接:
https://programmercarl.com/0704.二分查找.html#算法公开课
考点:
二分查找
解决代码:
class Solution {
public int search(int[] nums, int target) {
int i = 0;
int j = nums.length-1;
if(target < nums[i] || target > nums[j]){
return -1;
}
if(target == nums[0]){
return 0;
}
if(target == nums[j]){
return j;
}
while(i<j-1){
int mid = (i+j) / 2;
if(target == nums[mid]){
return mid;
} else if(target > nums[mid]){
i = mid;
} else{
j = mid;
}
}
if(target != nums[i]){
return -1;
}
return i;
}
}
思路:
给定的是有序数组,先判断小于最小或者大于最大,直接返回-1;
指针在0和size-1,如果等于最前面的值或者最后面的值则直接返回下标(也可能没必要);
获取i与j的平均值的数值大小作为下标,与target比较,相等返回下标,大于target则表示数据只可能在二分的左半部分,否则则在右半部分;
边界条件是i<j-1,不符合条件的时候跳出,若相等则表示最后一次找到了目标,若不相等则表示目标值不在列表中,返回-1;
优秀代码:
思路:
问题:
边界条件的确定