Intuition
In a rotated sorted array, exactly one half of any [l, r] window is still
sorted. Compare nums[mid] with nums[r] to tell which half contains the
rotation point (the minimum).
- If
nums[mid] > nums[r], the dip lies to the right of mid → go right. - Otherwise, the dip is at
midor to the left → go left (keepmid).
Explanation
Approach
l = 0, r = n - 1
while l < r:
mid = (l + r) // 2
if nums[mid] > nums[r]: l = mid + 1
else: r = mid
return nums[l]
Walk-through
nums = [4,5,6,7,0,1,2]
| step | l | r | mid | nums[mid] | nums[r] | action |
|---|---|---|---|---|---|---|
| 1 | 0 | 6 | 3 | 7 | 2 | l = 4 |
| 2 | 4 | 6 | 5 | 1 | 2 | r = 5 |
| 3 | 4 | 5 | 4 | 0 | 1 | r = 4 |
l == r == 4 → nums[4] = 0.
Implementation
class Solution {
public int findMin(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = (l + r) / 2;
if (nums[mid] > nums[r]) {
l = mid + 1;
} else {
r = mid;
}
}
return nums[l];
}
}