A sorted array of distinct values was rotated at an unknown pivot. Return the index of target, or -1 if it is absent, in O(log n) time.
At every mid, at least one half is sorted. If target lies inside the sorted half's range, search there; otherwise search the other half.
1function search(nums: number[], target: number): number {2let lo = 0, hi = nums.length - 1;3while (lo <= hi) {4const mid = (lo + hi) >> 1;5if (nums[mid] === target) return mid;6if (nums[lo] <= nums[mid]) {7if (nums[lo] <= target && target < nums[mid]) hi = mid - 1;8else lo = mid + 1;9} else {10if (nums[mid] < target && target <= nums[hi]) lo = mid + 1;11else hi = mid - 1;12}13}14return -1;15}
Search the whole array.
Space: play/pause · ←/→: step