Suppose a sorted array 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.
有序的序列然后经过旋转得到现在的序列。然后从中选择最小值1 用最简单的方法就是直接一个个进行比较
2在中间找到大小翻转的数据 但是上面两种都有问题,都是遍历的思想,这样计算复杂度没办法降低
class Solution {
public:
int findMin(vector<int> &num) {
int minValue = INT_MAX;
vector<int>::iterator it = num.begin();
for( ;it < num.end(); it++)
{
if(minValue >= *it)
{
minValue= *it;
}
}
return minValue;
}
};
标准的解答是利用了二分的思想
public int findMin(int[] A) {
int L = 0, R = A.length - 1;
while (L < R && A[L] >= A[R]) {
int M = (L + R) / 2;
if (A[M] > A[R]) {
L = M + 1;
} else if (A[M] < A[L]) {
R = M;
} else { // A[L] == A[M] == A[R]
L = L + 1;
}
}
return A[L];
}