81. Search in Rotated Sorted Array II

升级版二分法,注意边界。。。。。。。。。。特别是target所在的范围,是一块连续的区域。如果有重复数字的话,就把左边界自增1,指向下一个数字。

public boolean search(int[] nums, int target) {
    int l = 0,
        r = nums.length;
    while (l < r) {
        int mid = (l + r) >>> 1;
        if (nums[mid] == target) return true;
        if (nums[mid] > nums[l]) { // increment
            if (target >= nums[l] && target < nums[mid]) {
                r = mid;
            } else {
                l = mid + 1;
            }
        } else if (nums[mid] < nums[l]) { // decrement
            if (target > nums[mid] && target <= nums[r - 1]) {
                l = mid + 1;
            } else {
                r = mid; 
            }
        } else if (nums[mid] == nums[l]) {
            l += 1;
        }
    }
    return false;
}

results matching ""

    No results matching ""