劍指offer 06 旋轉陣列的最小數字

2022-07-08 04:48:13 字數 985 閱讀 6844

題目描述

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

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...