class Solution {
public int findMin(int[] nums) {
int l = 0, r = nums.length - 1;
while (l + 1 < r) {
int mid = l + ((r - l) / 2);
// System.out.println("l: " + l + " r: " + r + " mid: " + mid);
if (nums[l] < nums[r]) return nums[l];
else { // nums[l] >= nums[r]
if (nums[l] < nums[mid]) { // mid及其之前的元素都>=nums[l]>=nums[r],所以都可排除
l = mid + 1;
} else { // mid是右班部分,所以最小是肯定在mid及其左边
r = mid;
}
}
}
return nums[l] < nums[r] ? nums[l] : nums[r];
}
}
网友评论