首页 > 编程语言 > 详细

剑指 Offer 11. 旋转数组的最小数字

时间:2021-09-03 18:57:38      阅读:14      评论:0      收藏:0      [点我收藏+]

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 
解法:折半查找
思路:当nums[m]>nums[r],旋转点在[m+1,r]; 当nums[m]<nums[r],旋转点在[l,m]; nums[m]nums[r],无法判断区间,让r--
代码:
class Solution {
public int minArray(int[] numbers) {
int len = numbers.length;
if(len
1){
return numbers[0];
}
int l= 0;
int r= len-1;
while(l<r){
int m = (l+r)/2;
if(numbers[m]>numbers[r]){
l=m+1;
} else if(numbers[m]<numbers[r]){
r=m;
} else{
r--;
}
}
return numbers[l];

}

}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

剑指 Offer 11. 旋转数组的最小数字

原文:https://www.cnblogs.com/nickyBlog/p/15221380.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!