// TypeScript
function search(nums: number[], target: number): number {
let l = 0;
let r = nums.length - 1;
while (l <= r) {
const m = Math.floor((l + r) / 2);
if (nums[m] === target) {
return m;
}
if (nums[l] <= nums[m]) {
// the left half is properly sorted
if (nums[l] <= target && target < nums[m]) {
r = m - 1;
} else {
l = m + 1;
}
} else {
// the right half is properly sorted
if (nums[m] < target && target <= nums[r]) {
l = m + 1;
} else {
r = m - 1;
}
}
}
return -1;
};