面試題十一 旋轉陣列的最小數字

2022-06-10 04:57:09 字數 672 閱讀 1416

把乙個有序陣列前面若干個數搬到後面,求陣列中最小值

方法一:順序查詢最小值 o(n)

方法二:利用該序列的特殊性,使用二分查詢

static

int min(int

array)

int l=0;

int r=array.length-1;

int index=l; //

防止第乙個數就是最小的情況

while( array[index]>=array[r])

//旋轉後的特性,第乙個比最後乙個大,否則第乙個最小

index=(l+r)>>1;

//如果三值相同則無法判斷,只能順序查詢

if(array[l]==array[r]&&array[l]==array[index])

return

array[min];

}//否則

if(array[index]>=array[l]) //

左邊有序,最小值在右邊

l=index;

else

if(array[index]<=array[r])//

右邊有序,最小值在左邊

r=index;

}return

array[index];

}

面試題 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。解法 順序查詢即可,時間複雜度為 利用二分查詢的思想,大部分情況旋轉後陣列最小值左邊數值為最大,利用前後指標的方法找到最小值,此...

面試題8 旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表旋轉陣列的元素個數。...

面試題8 旋轉陣列的最小數字

旋轉陣列的最小數字 問題描述 將乙個嚴格遞增的數字序列從第i個位置切分,將有半部分挪到左半部分,比如 1,2,3,4,5,6 3,4,5,6,1,2 輸出序列中最小的數字的位置 笨方法是從左到右掃瞄一遍,但是o n 的複雜度肯定是不行的。根據問題描述的性質可知,變換後的序列的第乙個數是大於最後乙個數...