【双百解法】剑指 Offer 11. 旋转数组的最小数字
生活随笔
收集整理的這篇文章主要介紹了
【双百解法】剑指 Offer 11. 旋转数组的最小数字
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立志用最少的代碼做最高效的表達
把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個旋轉,該數組的最小值為1。
示例 1:
輸入:[3,4,5,1,2]
輸出:1
示例 2:
輸入:[2,2,2,0,1]
輸出:0
注意:官方給的題解雖然也能輸出正確答案,但可能不是旋轉數組中第一個最小的值,如輸入:12222111,則官方答案輸出的結果是第一個1,而不是最后一個2后的第一個1。
這道題細節很多很多,個人感覺在細節方面評個hard也不為過。
class Solution {public int minArray(int[] numbers) {int high = numbers.length-1, low = 0;while(high > low) {int mid = low + ((high - low) >> 1);// 為什么這里是=mid,而不是=mid+1,因為mid這個值是比較小的,因此有可能是最小值,所以不能跳過if(numbers[mid] < numbers[high]) high = mid;// 為什么這里是=mid+1,因為這個mid值很大,絕對不可能是最大值,因此可以跳過else if(numbers[mid] > numbers[high]) low = mid + 1;// 若mid = high,則說明重復了,則high--,去重else high--;}return numbers[low];} }
總結
以上是生活随笔為你收集整理的【双百解法】剑指 Offer 11. 旋转数组的最小数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【双百解法】剑指 Offer 10- I
- 下一篇: 【附可运行代码】剑指 Offer 12.