Search in Rotated Sorted Array II

MediumArrayBinary Search

Solution

export function search(nums: number[], target: number): boolean {
  const n = nums.length;
  let [start, end] = [0, n - 1];
  while (start <= end) {
    while (start < end && nums[start] === nums[start + 1]) {
      start += 1;
    }
    while (start < end && nums[end] === nums[end - 1]) {
      end -= 1;
    }
 
    const mid = Math.floor((start + end) / 2);
    if (nums[mid] === target) {
      return true;
    }
 
    if (nums[start] <= nums[mid]) {
      if (nums[start] <= target && target < nums[mid]) {
        end = mid - 1;
      } else {
        start = mid + 1;
      }
    } else {
      if (nums[mid] < target && target <= nums[end]) {
        start = mid + 1;
      } else {
        end = mid - 1;
      }
    }
  }
  return false;
}