您的位置:首页 > 其它

Leetcode(12) - Find Minimum in Rotated Sorted Array II

2017-05-22 23:14 363 查看
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/#/description

Follow up for "Find Minimum in Rotated Sorted Array":

What if duplicates are allowed?
Would this affect the run-time complexity? How and why?

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.

The array may contain duplicates.
Solution:

与上一题类似,采用二分法解题,我们要保证最小值始终在start和end之间,然后循环考察分以下4种情况:

1、nums[start] < nums[end], 说明最小值就是start

2、nums[mid] > nums[end],说明最小值在[mid + , end]之间
3、nums[mid] > nums[end],最小值可能在[mid, end - 1]之间,这种情况需要继续检测

4、非1,2,则最小值在[start, mid]之间

最后返回nums[start]

int FindMinimumInRotatedSortedArray2::findMin(std::vector<int>& nums) {
int start = 0, end = nums.size() - 1;
while (start < end) {
if(nums[start] < nums[end]) {
break;
}

int mid = (start + end) / 2;
if(nums[mid] > nums[end]) {
start = mid + 1;
} else if(nums[mid] == nums[end]) {
end--;
} else {
end = mid;
}
}

return nums[start];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: