81. Search in Rotated Sorted Array II - cocoder39/coco39_LC GitHub Wiki

81. Search in Rotated Sorted Array II

Discussing about nums[mid] vs nums[low] in the outer if-else can make the implementation clean: nums[mid] == target || nums[low] == target

else { //nums[mid] == nums[low]
    low++
}

look at nums[low] instead of nums[0], since nums[0] might have been kicked out

class Solution {
    public boolean search(int[] nums, int target) {
        if (nums == null || nums.length == 0) {
            return false;
        } 
        
        int low = 0;
        int high = nums.length - 1;
        while (high - low > 1) {
            int mid = low + (high - low) / 2;
            if (nums[mid] == target || nums[low] == target) {
                return true;
            } else if (nums[mid] > nums[low]) {
                if (target > nums[low] && target < nums[mid]) {
                    high = mid;
                } else {
                    low = mid;
                }
            } else if (nums[mid] < nums[low]) {
                if (target < nums[low] && target > nums[mid]) {
                    low = mid;
                } else {
                    high = mid;
                }
            } else {
                low++;
            }
        }
        
        return nums[high] == target || nums[low] == target;
    }
}