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

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

  • 题目简述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2])。请找出其中最小的元素。你可以假设数组中不存在重复元素。

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

    输入:[4,5,6,7,0,1,2] 输出:0

  • 思路:如果数组长度较短时,可直接使用暴力循环;如果数组有一定长度,则使用二分查找

    排序数组旋转后,会分成两段有序序列,最小值前面的数nums[i]都满足nums[i] >= nums[0],其中数组的最后一个元素nums[n-1]不满足这个条件

class Solution {
public:
    int findMin(vector<int>& nums) {
        if (nums.empty()) return 0;//处理空数组
        if (nums.back() > nums[0]) return nums[0];//处理排序数组
        int l = 0, r = nums.size() - 1;
        while (l < r)
        {
            int mid = l + r >> 1;
            if(nums[mid] < nums[r]) r = mid;//若中间数小于右端数,说明中间数到右端数依次递增
            else l = mid + 1;//否则,中间数属于左边递增数组
        }
        return nums[l];
    }
};

你可能感兴趣的:(LeetCode)