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

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [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. 旋转数组的最小数字

上一篇:黑马教育java架构师实战训练营


下一篇:Java程序的种类