题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
1.别人的解法
思路:排序数组的查找问题首先考虑使用 二分法 解决,其可将遍历法的 线性级别 时间复杂度降低至 对数级别
时间复杂度:log2n
代码
class Solution {
public int minArray(int[] numbers) {
int i=0;
int j=numbers.length-1;
int m;
while(i<j){
m=(i+j)/2;
//m在右序数组中
if(numbers[m]<numbers[j])
j=m;
//m在左序数组中
else if(numbers[m]>numbers[j])
i=m+1;
else
j=j-1;
}
return numbers[i];
}
}
结果
。。。怎么更慢了
。。又交了一次 双100了
2.我的解法
思路
数组中最小的数,就是被搬运到数组末尾的若干个元素中的第一个元素。
数组本来是递增的,如果遇到number[n+1]<numbers[n],就说明numbers[n+1]是最小的元素。
代码
class Solution {
public int minArray(int[] numbers) {
int temp=numbers[0];
for(int n:numbers){
if(n<temp){
return n;
}
else{
temp=n;
}
}
return numbers[0];
}
}
结果
毫无技巧可言为什么也过了?