題目描述
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。
note:給出的所有元素都大於0,若陣列大小為0,請返回0。
時間限制:c/c++ 3秒,其他語言6秒 空間限制:c/c++ 64m,其他語言128m
題目示例
輸入:
[3,4,5,1,2]
返回值:
1解法分析先說明一下定義,非遞減意為a[i]<=a[i+1],遞減意為a[i]>a[i+1],非遞增意為a[i]>=a[i+1],遞增意為a[i]而旋轉後的非遞減排序的陣列,形如[4,4,5,6,6,1,2,3],可看出分為了左右兩部分,而右側(尾部)部分的最左側元素即為陣列中的最小數。因此我們只需要對比相鄰兩元素的大小,一旦滿足a[i]>a[i+1],即左側元素大於右側元素,a[i+1]就是陣列中的最小值。
然而這種方式過於簡單,並且時間複雜度為o(n),更好的方法應該是使用二分法,可將時間複雜度降為o(logn)。
**
1執行結果function
minnumberinrotatearray(rotatearray)27
var fir = 0;
8var las = rotatearray.length - 1;
9while(las - fir > 1)else16}
17return
math.min(rotatearray[fir],rotatearray[las]);
18 }
劍指Offer06 旋轉陣列的最小數字
題意 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路根據旋轉陣列的定義...
牛客網 劍指offer 06 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。類似二分查詢 並沒有通過,不過自己做了大量測試,真沒發現問題在哪 pac...
劍指offer 旋轉陣列的最小數字06
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。class solution defminnumberinrotatear...