面試題11.旋轉(zhuǎn)數(shù)組的最小數(shù)字_hn

題目描述

把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。輸入一個(gè)遞增排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。例如,數(shù)組 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1。

示例

示例 1:

輸入:[3,4,5,1,2]
輸出:1

示例2:

輸入:[2,2,2,0,1]
輸出:0

解答方法

方法一:二分法

思路

  • 循環(huán)二分: 設(shè)置 left,right指針?lè)謩e指向 numbers 數(shù)組左右兩端,m = (left + right) // 2為每次二分的中點(diǎn)( "http://" 代表向下取整除法,因此恒有i \leq m < j),可分為以下三種情況:
    當(dāng) numbers[m] > numbers[right]時(shí): m 一定在 左排序數(shù)組 中,即最小值 x 一定在 [m + 1,right]閉區(qū)間內(nèi),因此執(zhí)行l(wèi)eft=m+1;
    當(dāng) numbers[m] < numbers[right] 時(shí): m一定在 右排序數(shù)組 中,即最小值x 一定在[left, m]閉區(qū)間內(nèi),因此執(zhí)行right=m;
    當(dāng) numbers[m] == numbers[right] 時(shí): 無(wú)法判斷m 在哪個(gè)排序數(shù)組中,即無(wú)法判斷旋轉(zhuǎn)點(diǎn) x 在 [left, m] 還是 [m+1,right] 區(qū)間中。解決方案: 執(zhí)行right=right?1 縮小判斷范圍 (分析見(jiàn)以下內(nèi)容) 。
  • 返回值: 當(dāng) left = right時(shí)跳出二分循環(huán),并返回 numbers[left] 即可。
    參考:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/mian-shi-ti-11-xuan-zhuan-shu-zu-de-zui-xiao-shu-3/

代碼

class Solution:
    def minArray(self, numbers: List[int]) -> int:
        if len(numbers) == 0:
            return
        left = 0
        right = len(numbers)-1
        while left<right:
            mid = left + (right-left)//2
            if numbers[mid] > numbers[right]:
                left = mid + 1
            elif numbers[mid] < numbers[right]:
                right = mid
            else: 
                right -= 1
        return numbers[left]

時(shí)間復(fù)雜度

O(log N) : 在特例情況下(例如 [1, 1, 1, 1]),會(huì)退化到 O(N)。

空間復(fù)雜度

O(1) :left , right , mid 指針使用常數(shù)大小的額外空間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 旋轉(zhuǎn)數(shù)組的最小數(shù)字 題目 給定一個(gè)遞增的旋轉(zhuǎn)數(shù)組A,返回旋轉(zhuǎn)數(shù)組中的最小值。旋轉(zhuǎn)數(shù)組:給定一個(gè)已排序的數(shù)組,假設(shè)為...
    藍(lán)雪冬荷閱讀 503評(píng)論 0 0
  • 題目 把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。輸入一個(gè)遞增排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)...
    人一己千閱讀 242評(píng)論 0 0
  • 把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。 輸入一個(gè)非遞減排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)...
    繁星追逐閱讀 755評(píng)論 0 0
  • 題目描述: 把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。輸入一個(gè)遞增排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸...
    周英杰Anita閱讀 113評(píng)論 0 1
  • 習(xí)慣的4個(gè)方面,線(xiàn)索(觸發(fā)點(diǎn))、習(xí)慣路徑,激勵(lì),信念。 習(xí)慣能夠節(jié)省時(shí)間,節(jié)省大腦做判斷的精力; 改變一個(gè)習(xí)慣需要...
    大美的打字機(jī)閱讀 309評(píng)論 0 0

友情鏈接更多精彩內(nèi)容