升序數組在未知點旋轉(如 [4,5,6,7,0,1,2]),無重複元素,求最小值。
設左右指針 l, r,中點 mid:
nums[mid] > nums[r]:最小值在右半部 [mid+1, r][l, mid](含 mid)循環直到 l == r,即為最小值位置。
public int findMin(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = l + (r - l) / 2;
if (nums[mid] > nums[r]) l = mid + 1;
else r = mid;
}
return nums[l];
}
nums[mid] ≤ nums[r] 持續收縮左側,最終 l=0nums[mid] == nums[r] 時 r--