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;
}