LeetCodeJava题解 704. Binary Search

题目地址:704. Binary Search
解题思路:一道平平无奇的简单题,需要注意定是,跳出循环的边界条件是什么,不要错写成low==high
看了一下大佬们的题解,发现虽然是一道“平平无奇”简单题,但是还是有一些讲究的。
比如我上面直接将low==high定义为错误条件,是不严谨的。
实际这道题它可以分为两种解法:

  1. 跳出循环条件为左闭右闭
  2. 跳出循环条件为左闭右开
  1. 左闭右闭
class Solution {
    public int search(int[] nums, int target) {
        int low=0; 
        int high=nums.length-1;
        while(low<=high){
            int mid = (high+low)/2;
            if(nums[mid]==target){
                return mid;
            }
            else if(nums[mid]>target){
                high=mid-1;
            }
            else{
                low=mid+1;
            }
        }
        return -1;
    }
}

 
2. 左闭右开

public int search(int[] nums, int target) {
        int low=0;
        int high=nums.length;
        while(low<high)
        {
            int mid = (low + high)/2;
            if(nums[mid]==target)
            {
                return mid;
            }else if(nums[mid]>target)
            {
                high=mid;
            }else if(nums[mid]<target)
            {
                low=mid+1;
            }
        }
        return -1;
    }
原文地址:https://www.cnblogs.com/hooyeefam/p/15721628.html