《劍指offer》牛客網java題解-旋轉數組的最小數字


把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數組的最小值為1。 NOTE:給出的所有元素都大於0,若數組大小為0,請返回0。

首先最容易想到的就是遍歷一遍數組,找出下一個小於上一個的數字

import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int n = array.length;
if (n ==0 )return 0;
for (int i=0;i<n-1;i++){
if (array[i]>array[i+1]){
return array[i+1];
}
}
return array[0];

}
}

對於有排序的問題,應該要用二分法來做,讓時間復雜度下降為O(nlgn)。
因為是非單調遞減,所以是會存在相同的數字的。
所以當rray[mid] == array[high]時,就要一個一個去找了。

public class Solution {
public int minNumberInRotateArray(int [] array) {
int low = 0 ; int high = array.length - 1;
while(low < high){
int mid = low + (high - low) / 2;
if(array[mid] > array[high]){
low = mid + 1;
}else if(array[mid] == array[high]){
high = high - 1;
}else{
high = mid;
}
}
return array[low];
}
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com