您的位置:首页 > 其它

leetcode-153. Find Minimum in Rotated Sorted Array

2016-05-02 14:39 253 查看
Suppose a sorted array 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.

Subscribe to see which companies asked this question

思路:

1.当nums[0] < nums[nums.size()-1]时,未位移,直接返回nums[0]

2.否则说明位移了,已nums[0]为比较数进行折半,middle数字大于compare时继续后半部分,否则继续前半部分。注意nums[0]此时不能参与查找了,否者当middle == 0时可能会出问题

class Solution {
public:
int findMin(vector<int>& nums) {
//两种情况,一种第一个比最后一个小,直接返回第一个
//另一种移位了,最小的在中间,折半和第一个元素比较
int length = nums.size();
if(length == 0)
{
return 0;
}
if(length == 1)
{
return nums[0];
}

if(nums[0] < nums[length-1])
{
return nums[0];
}
//这要从下标1开始,nums[0]此时肯定不是最小的,不能参与排序,不然当最后middle==0时可能会出问题
return getMinElement(nums,1,length-1,nums[0]);
}

int getMinElement(vector<int>&nums,int begin,int end,int compareNum)
{
if(begin >= end)
{
return nums[begin];
}
//防止溢出
int middle = begin + (end - begin)/2;
if(nums[middle] > compareNum)
{
return getMinElement(nums,middle+1,end,compareNum);
}
else
{
//返回当前数字和另一半求得值得最小值
return min(nums[middle],getMinElement(nums,begin,middle-1,compareNum));
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode