Description
Suppose 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
Input: [3,4,5,1,2]
Output: 1
Solution 1(C++)
class Solution {
public:
int findMin(vector<int>& nums) {
int l = 0, r = nums.size() - 1;
while(r - l > 1) {
int mid = (r - l) / 2 + l;
if(nums[mid] <= nums[r]) {
r = mid;
} else if(nums[mid] > nums[r] && nums[mid] >= nums[l]) {
l = mid;
}
}
return min(nums[l], nums[r]);
}
};
后续更新
2018-5-12做到的与之相关的题目1,2;
2018-5-16更新题目3。
- LeetCode-33. Search in Rotated Sorted Array
- LeetCode-81. Search in Rotated Sorted Array II
- LeetCode-34. Search for a Range
算法分析
使用二分查找即可解答,不过这个二分查找是找到最小值,还是很有意思的。之前的二分查找的总结可以参考:
Algorithm-Binary Search算法。
还可以参考:
数据结构图文解析之:二分查找及与其相关的几个问题解析。
程序分析
略。