您的位置:首页 > 其它

154.Find Minimum in Rotated Sorted Array II

2015-07-03 15:28 204 查看
思路:循环排序,二分法。注意存在相等值的情况。

class Solution {

public:

    int findMin(vector<int>& nums) {

        int len=nums.size();

        //判错

        if(len<0) return -1;

        if(len==1) return nums[0];

        int left=0,right=len-1;

        while(left<right){

            int mid=(left+right)/2;

            if(nums[left]<nums[right]){//1.左边<右边的情况

                return nums[left];

            }else if(nums[left]>nums[right]){//2.左边>右边情况

                if(nums[mid]>=nums[left]){

                        left=mid+1;

                }else{

                        right=mid;

                }

            }else{//3.左边=右边的情况

                if(nums[mid]>nums[left]){//如果中间的大于左边的,在右半部分

                        left=mid+1;

                }else if(nums[mid]<nums[left]){//如果中间的小于左边的,在左半部分

                        right=mid;

                }else{//如果左边和中间和右边的值都相同,只能一个一个得遍历

                        int cur=left;

                        while(cur<right){

                                cur++;

                                if(nums[cur]<nums[left]){//找到第一个小的值,就是最小值

                                        return nums[cur];

                                }else if(nums[cur]>nums[left]){//找到第一个大的值,最小值肯定在右边

                                        left=cur+1;

                                        break;

                                }

                        }

                        return nums[left];//如果全部值都相等,就随便返回一个

                }

            }

        }

        return nums[left];

    }

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