LintCode 159. 寻找旋转排序数组中的最小值
解题思路:
如上图,我们通过红色标记的A点来区分mid落在了哪一段。
nums[mid] <= nums[end]
,说明mid落在图中右半部分,那最小值此时应该在start ~ mid区间范围内的。nums[mid] > nums[end]
,说明mid落在左半部分,那此时最小值应该在mid ~ end区间范围内。
代码实现:
class Solution {
public:
/**
* @param nums: a rotated sorted array
* @return: the minimum number in the array
*/
int findMin(vector<int> &nums) {
int start = 0, end = nums.size() - 1;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (nums[mid] <= nums[end]) end = mid;
else start = mid;
}
return nums[start] < nums[end] ? nums[start] : nums[end];
}
};