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]; }