原题链接
typescript
function findMin(nums: number[]): number {
// n次旋转后 应该得到一个左降右升的数组
// 中间节点就是 答案
if(!nums) return 0;
let left = 0;
let right = nums.length - 1;
// 注意此处条件 二者不能相遇 否则下面的逻辑错误
while(left < right) {
const mid = Math.floor((left + right) >> 1);
const value = nums[mid];
if(value < nums[right]) {
// 注意不是mid - 1; 因为此时mid可能是最小的元素
right = mid;
// 注意 此时 比较的是right
} else if(value > nums[right]) {
// 此时mid必不可能是最小的元素
left = mid + 1;
} else {
// 相等时 舍弃最高点
right--;
}
}
return nums[left];
};