06: 旋转数组的最小数字

2019-07-30  本文已影响0人  iwtbam

题目描述

解题思路

AC代码

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(!rotateArray.size())
            return 0;
        
        int min = INT_MAX;
        
        for(auto& e:rotateArray){
            if(e < min)
                min = e;
        }
        
        return min;
    }
};

class Solution {
public:
    int search(vector<int>& nums, int target){
        
        if(nums.empty())
            return -1;
        
        if(nums.size() == 1)
            return target == nums[0] ? 0 : -1;
        
        int rotate_index = search_rotate_index(nums);

        int l = rotate_index + 1, h = nums.size() - 1;
        if(target >= nums[0] && target <= nums[rotate_index])
        {
            h = l;
            l = 0;
        }

        while(l <= h)
        {
            int m = (l + h)/2;
            if(nums[m] > target)
                h = m - 1;
            else if(nums[m] < target)
                l = m + 1;
            else
                return m;            
        }

        return -1;
    }

    int search_rotate_index(vector<int>&nums)
    {
        int l = 0, h = nums.size() - 1;
        
        if(nums[l] < nums[h])
            return 0;
        
        while(l <= h)
        {
            int m = (l +  h) / 2;
            if(nums[m] > nums[m + 1])
                return m;
            else
            {
                if(nums[m] >= nums[l])
                    l = m + 1;
                else
                    h = m - 1;
            }
        }
        return 0;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读