假设一个排好序的数组在其某一未知点发生了旋转(比如 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2 )。你需要找到其中最小的元素。
在线评测地址:https://www.lintcode.com/problem/find-minimum-in-rotated-sorted-array/?utm_source=sc-v2ex-fks
样例 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) {
int left = 0, right = nums.length - 1;
// 二分法
while (left < right){
// 最小值在 left
if (nums[left] < nums[right]){
return nums[left];
}
int mid = left + (right - left) / 2;
// 最小值在[left, mid]
if (nums[left] > nums[mid]){
right = mid;
}
// 最小值在(mid, right]
else{
left = mid + 1;
}
}
return nums[left];
}
}
更多题解参考:https://www.jiuzhang.com/solution/find-minimum-in-rotated-sorted-array/?utm_source=sc-v2ex-fks
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.