public class Solution {
public int findMin(int[] nums) {
int left = 0;
int right = nums.length - 1;
while(left < right) {
int middle = left + (right - left)/2 ;
if(nums[left] < nums[right]) {
return nums[left];
}
else if(nums[middle] < nums[(middle + 1) % nums.length] &&
nums[middle] < nums[(middle - 1 + nums.length) % nums.length]) {
return nums[middle];
}
else if(nums[left] <= nums[middle]) {
left = middle + 1;
}
else {
right = middle - 1;
}
}
return nums[left];
}
}
public class Solution {
public int findMin(int[] nums) {
if (nums == null || nums.length < 1) return -1;
int start = 0;
int end = nums.length - 1;
while (start < end) {
if (nums[start] < nums[end]) return nums[start];
int mid = start + (end - start) / 2;
if (nums[mid] >= nums[start]) {
start = mid + 1;
} else {
end = mid;
}
}
return nums[start];
}
}
/*
[1]
[6,7,8,-1,0,1,2,4,5]
[2,4,4,5,6,6,7,7,7,0,1,2,2]
*/