//[4,5,6,7,0,1,2] find the minimum number
//
// Rotated sorted array
// /
// A /
//-------------------------------------
// / B
// /
// Use B as point
// First position <= last number
//(Wrong: First position <= or < First Number
// if the array is increasing order, cannot use A
class Solution {
public:
/**
* @param nums: a rotated sorted array
* @return: the minimum number in the array
*/
int findMin(vector<int> &nums) {
// write your code here
int size = nums.size();
if (size == 0) {
return -1;
}
int start = 0;
int end = size - 1;
while (start + 1 < end) {
int mid = (end - start) / 2 + start;
if (nums[mid] >= nums[end]) {
start = mid;
} else {
end = mid;
}
}
if (nums[start] < nums[end]) {
return nums[start];
} else {
return nums[end];
}
}
};