力口704.二分查找(java)
·
基本思路:定义一个查找范围,每次比较差找范围的中点值与目标值的大小,如果不相等则缩小查找范围。
题目分析:
1.nums是一个升序数组,即每一个元素比后一个元素小。
2.nums是一个左闭右闭的区间。(n 将在 [1, 10000]之间)
易错点:
1.while循环条件中的取等问题
若所给区间是左闭右闭则取等,即while(left<=right)
若为左闭右开则不取等,即while(left<right)
2.缩小范围
若是左闭右闭区间:
当中间值大于目标值时,为了缩小右边界应为中间值减一(right=mid-1);反之缩小左边界应为中间值加一(left=mid+1)
若时左闭右开:
当中间值大于目标值时,为了缩小右边界应令左边界为中间值(right=mid);反正缩小左边界应为中间值加一(left=mid+1)
3.右边界赋值
若为左闭右闭时右边界为nums.length-1,若为左闭右开时为nums.length
class Solution {
public int search(int[] nums, int target) {
int left=0, right=nums.length-1;
while(left<=right){
int mid=(right-left)/2+left;
int num=nums[mid];
if(num==target){
return mid;
}else if(num>target){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}
}
更多推荐


所有评论(0)