我的思路:采用二分搜索,如果mid比两边高,则往右搜索,如果mid比两边低,则判断mid是不是最低,如果是则输出,如果不是则往左搜索
代码如下:
public int findMin(int[] nums) { int length = nums.length; if (nums[0] < nums[length-1]){ return nums[0]; } int low = 0; int high = length-1; while (low < high){ int mid = (low + high) / 2; if (nums[mid] >= nums[low] && nums[mid] >= nums[high]){ low = mid + 1; } else if (nums[mid] <= nums[low] && nums[mid] <= nums[high]){ if (nums[mid] < nums[mid-1]){ return nums[mid]; }else{ high = mid - 1; } }else { high = mid - 1; } } return nums[low]; }
结果:
官方给出的思路是只需要将mid和右端比较即可
代码如下:
class Solution {
public int findMin(int[] nums) {
int low = 0;
int high = nums.length - 1;
while (low < high) {
int pivot = low + (high - low) / 2;
if (nums[pivot] < nums[high]) {
high = pivot;
} else {
low = pivot + 1;
}
}
return nums[low];
}
}