二分查找的小问题

代码如下

public int search(int[] nums, int target) {
        int start = 0;
        int end = nums.length-1;
        int mid = 0;        
        while(start<=end){
            mid = start + (end - start)/2;            	        
            if(nums[mid]==target)
                return mid;         
            else if(nums[mid]<target)        
                start = mid + 1;            
            else                
                end = mid - 1;        
        }        
        return -1;
}
为什么*while(start<=end)*这里是start<=end而不是 “<” 呢?

  因为初始化 right 的赋值是 nums.length - 1,即最后一个元素的索引,而不是 nums.length
  区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),原因很简单,因为索引大小为 nums.length 是越界的。

猜你喜欢

转载自blog.csdn.net/harryshumxu/article/details/104274552