[LeetCode] 153、寻找旋转排序数组中的最小值

题目描述

假设按照升序排序的数组在预先未知的某个点上进行了旋转。请找出其中最小的元素。(你可以假设数组中不存在重复元素)

输入: [3,4,5,1,2]
输出: 1

解题思路

《剑指offer》第11题,不过在这里这个题难度降低了,已经规定了无重复元素。

参考代码

这是《剑指offer》上的解法,考虑了各种可能情况。

class Solution {
public:
    int findMin(vector<int> rotateArray) {        
        int length = rotateArray.size();
        if(length == 0)
            return 0;
            
        int low = 0, high = length-1;
        int mid = low;  // 特殊情况:排序数组
        while(rotateArray[low] >= rotateArray[high]){  // 这个循环条件记不清了
            if(high - low == 1){
                mid = high;
                break;
            }
            
            mid = (low + high)>>1;
            if(rotateArray[low] == rotateArray[mid] && rotateArray[mid] == rotateArray[high]){
                return minInArray(rotateArray, low, high);
            }
            
            if(rotateArray[mid] >= rotateArray[low])
                low = mid;
            else
                high = mid;
        }
        return rotateArray[mid];
    }
    
    int minInArray(vector<int> rotateArray, int low, int high){
        int _Min = 0x7FFFFFFF;
        for(int i=0; i<rotateArray.size(); i++){
            if(rotateArray[i] < _Min)
                _Min = rotateArray[i];
        }
        return _Min;
    }
};
发布了402 篇原创文章 · 获赞 588 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/ft_sunshine/article/details/104009011