劍指Offer06 旋轉陣列的最小數字

2021-10-24 13:19:37 字數 722 閱讀 9099

題意

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列[3,4,5,1,2]為[1,2,3,4,5]的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

思路根據旋轉陣列的定義,其實旋轉陣列實質上就是兩個非遞減的序列組合而成,前乙個序列不小於後乙個序列,因此尋找旋轉陣列中的最小值就是尋找兩個序列的分界點,即出現array[i+1] < array[i]的位置(其實應該算上等於,因為極端資料可能所有數字均一樣。。。)

1、直接暴力:迴圈求解出現array[i+1] < array[i]的位置,輸出array[i+1],可以ac,但是時間複雜度o(n),不建議。

2、二分求解:首先將left = 0, right = len(array) - 1, mid = (left + right) / 2, 然後比較 array[left]與 array[mid]的大小,當left與right不相等時:

**

class solution else if(rotatearray[mid] < rotatearray[left])else

}return rotatearray[left];

}};

反思

​ 寫二分要特別注意終止條件與更新策略,比如若是沒有left++操作,可以回一直困在left+1 = right中無法前進。

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

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。note 給出的所有元素都大於0,若陣列大小為0,請返回0。時間限制 c c 3秒,其他語言6秒 空間限制 c c 64m,其他語言128m 題目示例 輸入 3,4...

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

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。類似二分查詢 並沒有通過,不過自己做了大量測試,真沒發現問題在哪 pac...

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

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。class solution defminnumberinrotatear...