159. 寻找旋转排序数组中的最小值
假设一个排好序的数组在其某一未知点发生了旋转(比如
0 1 2 4 5 6 7
可能变成
4 5 6 7 0 1 2
)。你需要找到其中最小的元素。
样例
样例 1:
输入:[4, 5, 6, 7, 0, 1, 2]
输出:0
解释:
数组中的最小值为0
样例 2:
输入:[2,1]
输出:1
解释:
数组中的最小值为1
注意事项
你可以假设数组中不存在重复元素。
public class Solution {
/**
* @param nums: a rotated sorted array
* @return: the minimum number in the array
*/
public int findMin(int[] nums) {
if (nums.length == 1) return nums[0];
int min = nums[0];
int left = 0;
int end = nums.length - 1;
if (nums[left] > nums[end]) {
min = nums[end];
if (min < nums[end - 1]) return min;
int mid = (left + end) / 2;
while (left < end) {
// System.out.println(nums[mid]);
if (nums[mid] < nums[mid - 1] ) {
return nums[mid];
} else {
if (nums[mid] > min) {
left = mid;
mid = (left + end ) / 2;
} else {
end = mid;
mid = (left + end) / 2;
}
}
}
}
return min;
}
}