Lintcode 寻找旋转排序数组中的最小值 II

来源:互联网 发布:迭代器java 编辑:程序博客网 时间:2024/04/26 12:06

假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。

你需要找到其中最小的元素。

数组中可能存在重复的元素。

 注意事项

The array may contain duplicates.

样例

给出[4,4,5,6,7,0,1,2]  返回 0

标签 

二分法 分治法

二分法

class Solution {public:    /**     * @param num: the rotated sorted array     * @return: the minimum number in the array     */    int findMin(vector<int> &num) {        // write your code here                 // write your code here          int l = 0;          int r = num.size()-1;          if(num[l]<num[r])              return num[l];          while(l<r)          {              int mid = (l+r)/2;              if(num[mid]>num[r])                  l = mid+1;              else if(num[mid]<num[r])                  r = mid;              else                r--;        }          return num[l];              }};


先变换成顺序排列

class Solution {public:    /**     * @param num: the rotated sorted array     * @return: the minimum number in the array     */    int findMin(vector<int> &num) {        // write your code here              int n=num.size();        int temp;        for(int i=0;i<n;i++){            if(num[0]>=num[n-1])            {                temp=num[0];                num.erase(num.begin());                num.push_back(temp);            }            else            break;        }        return num[0];    }};


0 0
原创粉丝点击