【LeetCode】154. Find Minimum in Rotated Sorted Array II

来源:互联网 发布:php输出100以内的素数 编辑:程序博客网 时间:2024/05/16 13:56

【LeetCode】154. Find Minimum in Rotated Sorted Array II


【题目描述】

  Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

  (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

  Find the minimum element.

  The array may contain duplicates.


【输入输出】

   [4, 5, 6, 7, 0, 1, 2] -> 0
   [1, 1, 1] ->1


【解题思路】

二分法:1. 当没有重复元素时,mid = (from + to) / 2, 若nums[mid] > nums[i] && nums[mid] < nums[j],说明nums依旧为升序,返回nums[0]2. 若nums[mid] > nums[j],则最小值位于[mid, to],i = mid;否则最小值位于[from, mid],j = mid;3. 当有重复元素时,可用unique函数去除重复元素,再使用本算法。


【代码】

// 题目153 代码class Solution {public:    int findMin(vector& nums) {        if(nums.size() == 1) return nums[0];        int i = 0, j = nums.size() - 1;        while(true) {            if(j - i == 1) return min(nums[i], nums[j]);            int mid = (i + j) / 2;            if(nums[mid] > nums[i] && nums[mid] < nums[j]) return nums[0];            else if(nums[mid] > nums[j]) i = mid;            else j = mid;        }    }};

// 题目154class Solution {public:    int findMin(vector& nums) {        vector::iterator ite = unique(nums.begin(), nums.end());        if(ite == nums.begin() + 1) return nums[0];        int i = 0, j = (ite == nums.end()) ? nums.size() - 1 : ite - nums.begin() - 1;        while(true) {            if(j - i == 1) return min(nums[i], nums[j]);            int mid = (i + j) / 2;            if(nums[mid] > nums[i] && nums[mid] < nums[j]) return nums[0];            else if(nums[mid] > nums[j]) i = mid;            else j = mid;        }    }};

0 0
原创粉丝点击