把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [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
解題思路:
採用二分法的思想,與二分法不同的地方在於,將陣列旋轉過後,在陣列中一定能找到乙個最小數字。
當取left == 0,right == numbers.size() - 1時,不斷對比mid和right的大小。
如果mid的值大於right,則最小值一定在[mid,right]之間,此時收縮左邊界left = mid + 1。當mid == right時,得到最小值。
如果mid小於right,則最小值一定在[left,mid]中。由於此時mid本身可能是最小值,因此收縮右邊界時right = mid;
如果mid == right,此時可能mid是最小值,也可能最小值在mid左邊,因此應當收縮right,得到最小值。
**實現:
class
solution
int left =0;
int right = numbers.
size()
-1;while
(left < rigjt)
else
if(numbers[mid]
< numbers[right]
)else
}return numbers[right];}
}
旋轉陣列最小
題外話 剛開始我看到題目的時候,腦子一直在想,直接遍歷陣列,這樣最小的不就能找到最小的麼,不過去網上搜尋了一下後,發現這確實是乙個解決的辦法,但時間複雜度為o n 這樣的答案達不到面試官的要求,所以大家做這種面試題的時候,要轉換思路,在解決問題的同時,盡量給出最優解 好了,分析題目,可以知道得出結論...
LeetCode 旋轉陣列
將包含n 個元素的陣列向右旋轉 k 步。例如,如果 n 7 k 3,給定陣列 1,2,3,4,5,6,7 向右旋轉後的結果為 5,6,7,1,2,3,4 注意 盡可能找到更多的解決方案,這裡最少有三種不同的方法解決這個問題。要求空間複雜度為 o 1 關聯的問題 反轉字串中的單詞 ii public ...
LeetCode 旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1,2,3,4,5,6,7 和 k 3輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,4...