现在的位置: 首页 > 综合 > 正文

Find Minimum in Rotated Sorted Array

2017年12月22日 ⁄ 综合 ⁄ 共 684字 ⁄ 字号 评论关闭

Find Minimum in Rotated Sorted Array

我的思路:

1、在一个旋转数组中找到最小的那个数,只需要找到旋转的那个点就可以了。特殊情况没有旋转或者说旋转点在-1这个下标,返回num[0],如果只有一个数也返回num[0]。

2、由于没有重复的数,设定两个下标,从两头往中间找。当左边的值比右边小的时候停止循环。

3、如果begin == end,说明是奇数个数,我们要判断最中间的数是最大还是最小;如果不等于,说明是偶数个数或者已经错过,只需判断num[end]是在最大的 数还是最小的数。这里说得不清楚,应该有更好的判断方法。

代码如下:

    int findMin(vector<int> &num) {
        if (num[0] <= num[num.size() - 1])
            return num[0];
        int begin = 0, end = num.size() -1;
        while (num[begin] > num[end]) {
            begin++;
            end--;
        }
        return num[(begin == end ? (num[begin - 1] < num[begin] ? begin : begin - 1) : (num[end] > num[end + 1] ? end : begin - 1)) + 1];
    }

别人思路:

1、二分明显是可以的,下面代码来自leetcode讨论区

int findMin(vector<int> &num) {
        int lo = 0, hi = num.size() - 1;
        while(lo < hi){
              int mid = (lo + hi) / 2;
              if (num[mid] > num[hi]) 
                lo = mid + 1;
              else 
                hi = mid;
        }
        return num[lo];
    }

抱歉!评论已关闭.