leetcode 旋轉陣列的最小數字

2021-10-24 04:02:27 字數 901 閱讀 1525

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [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...