二分
class Solution {
public:
/*
test: [1]
test: [2, 1]
test: [3, 1, 2]
test: [2, 3, 1]
test: [3, 4, 1, 2]
test: [3, 4, 5, 1, 2]
*/
int findMin(vector<int> &num) {
int size = num.size();
int min = num[size-1];
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (((mid - 1 >= 0 && num[mid] < num[mid-1]) || (mid == 0)) &&
((mid + 1 < size && num[mid] < num[mid+1]) || (mid == size - 1))) {
return num[mid];
}
if (num[mid] > min) {
left = mid + 1;
} else {
right = mid - 1;
min = num[mid];
}
}
}
};