Leetcode - 153. 寻找旋转排序数组中的最小值
解题思路参考代码中的注释:
class Solution {
// 本题和第33题(https://leetcode-cn.com/problems/search-in-rotated-sorted-array/)类似
public int findMin(int[] nums) {
// 搜索区间[left, right]
int left = 0, right = nums.length - 1;
while (left < right) {
int mid = (left + right) >> 1;
// 如果中间点大于等于左端点,说明[left, mid]是有序的
if (nums[mid] >= nums[left]) {
// 由于[left, mid]是有序的,因此nums[left]是该区间上的最小值
// 那么只要nums[left] < nums[right],就可以断定nums[left]是[left, right]区间上的最小元素
if (nums[left] < nums[right]) {
return nums[left];
}
// 否则继续二分搜索
left = mid + 1;
// 如果中间点小于左端点,说明[mid, right]是有序的
} else {
if (nums[mid] < nums[mid - 1]) {
return nums[mid];
}
right = mid - 1;
}
}
return nums[left];
}
}
查看7道真题和解析