leetcode_154 Find Minimum in Rotated Sorted Array II

来源:互联网 发布:网络项目传销名单 编辑:程序博客网 时间:2024/06/03 00:07

题目分析:

在递增的旋转数组中找到最小的数(数组中可能存在重复数)。

解题思路:

  • 两种方法实现

    方法1:从后向前一遍遍历扫描实现

    方法2:利用二分查找实现。

  • 实现程序

    class Solution{    public:        //从后向前扫描实现         int findMin1(vector<int> &nums)        {            if (nums.size() == 0)           // 处理特殊情况                 return -1;            if (nums.size() == 1)                return nums[0];            int j = nums.size() - 1;            int min = nums[j];            for (j = j - 1; j >= 0; j--)    // 一遍遍历扫描判断             {                if (nums[j] < min)                {                    min = nums[j];                }            }            return min;        }        //二分查找实现        int findMin(vector<int> &nums)        {            if (nums.size() == 0)           // 处理特殊情况                 return -1;            if (nums.size() == 1)                return nums[0];            int size = nums.size() - 1;            int begin = 0;            int end = size;            // 二分查找实现             while (begin < end && nums[begin] >= nums[end])            {                int mid = (begin + end) / 2;                if (nums[mid] < nums[begin])                {                    end = mid;                }                else if (nums[mid] == nums[begin])  // 调整出现数组数相等情况                 {                    begin++;                }                else                {                    begin = mid + 1;                }            }            return nums[begin];        } };
0 0