153. Find Minimum in Rotated Sorted Array
Leetcode Array Binary SearchSuppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,1,2,4,5,6,7]
might become [4,5,6,7,0,1,2]
).
Find the minimum element.
You may assume no duplicate exists in the array.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
分析¶
在一个有序数组中查找一个元素可以用二分查找,二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度都为O(\log N)。
本题可以修改二分查找算法进行求解:
- 当nums[mid] <= nums[hi] 的情况下,说明解在[lo, mid]之间,此时令hi = mid;
- 否则解在[mid + 1, hi]之间,令lo = mid + 1。
public int findMin(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int lo = 0, hi = nums.length - 1, mid;
while (lo < hi){
mid = (lo + hi)/2;
if(nums[mid] <= nums[hi]) hi = mid;
else lo = mid + 1;
}
return nums[lo];
}