LeetCode習(xí)題:尋找旋轉(zhuǎn)排序數(shù)組中的最小值

題目描述:已知一個(gè)長(zhǎng)度為 n 的數(shù)組表锻,預(yù)先按照升序排列,經(jīng)由 1 到 n 次 旋轉(zhuǎn) 后乞娄,得到輸入數(shù)組瞬逊。例如,原數(shù)組 nums = [0,1,2,4,5,6,7] 在變化后可能得到:

  • 若旋轉(zhuǎn) 4 次确镊,則可以得到 [4,5,6,7,0,1,2]
  • 若旋轉(zhuǎn) 7 次范删,則可以得到 [0,1,2,4,5,6,7]

注意蕾域,數(shù)組 [a[0], a[1], a[2], ..., a[n-1]] 旋轉(zhuǎn)一次 的結(jié)果為數(shù)組 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。給你一個(gè)元素值 互不相同 的數(shù)組 nums 到旦,它原來是一個(gè)升序排列的數(shù)組旨巷,并按上述情形進(jìn)行了多次旋轉(zhuǎn)。請(qǐng)你找出并返回?cái)?shù)組中的 最小元素 采呐。

示例:

例1
    輸入:nums = [3,4,5,1,2]
    輸出:1
    解釋:原數(shù)組為 [1,2,3,4,5] ,旋轉(zhuǎn) 3 次得到輸入數(shù)組斧吐。
例2
    輸入:nums = [4,5,6,7,0,1,2]
    輸出:0
    解釋:原數(shù)組為 [0,1,2,4,5,6,7] 仲器,旋轉(zhuǎn) 4 次得到輸入數(shù)組。
例3
    輸入:nums = [11,13,15,17]
    輸出:11
    解釋:原數(shù)組為 [11,13,15,17] 乏冀,旋轉(zhuǎn) 4 次得到輸入數(shù)組。

提示:

  • n == nums.length
  • 1 <= n <= 5000
  • -5000 <= nums[i] <= 5000
  • nums 中的所有整數(shù) 互不相同
  • nums 原來是一個(gè)升序排序的數(shù)組煤辨,并進(jìn)行了 1 至 n 次旋轉(zhuǎn)

解題思路:旋轉(zhuǎn)之后分以下三種情況

    1. 旋轉(zhuǎn)后還是原數(shù)組,依然是一個(gè)升序數(shù)組端三,最小值就是第一個(gè)元素
    1. 旋轉(zhuǎn)后是一個(gè)降序數(shù)組鹃彻,最小值是最后一個(gè)元素
    1. 最小元素在數(shù)組中某個(gè)位置,如下圖


      leetcode圖1

第三種情況又分兩種情況

情況一:nums[mid]<nums[r]。如下圖所示育拨,這說明 nums[mid] 是最小值右側(cè)的元素欢摄,因此我們可以忽略二分查找區(qū)間的右半部分

leetcode圖2

情況二:nums[mid]>nums[r]。如下圖所示怀挠,這說明 nums[mid] 是最小值左側(cè)的元素,因此我們可以忽略二分查找區(qū)間的左半部分闷畸。

leetcode圖3

解題語言: Swift

static func findMin(_ nums: [Int]) -> Int {
        var l = 0, r = nums.count - 1
        while l < r {
            let mid = (l + r) / 2
            if (nums[mid] > nums[r]) {
                l = mid + 1
            } else {
                r = mid
            }
        }
        return nums[l]
    }

復(fù)雜度分析:

時(shí)間復(fù)雜度:時(shí)間復(fù)雜度為 O(logn)吞滞,其中 n 是數(shù)組 nums 的長(zhǎng)度佑菩。在二分查找的過程中裁赠,每一步會(huì)忽略一半的區(qū)間,因此時(shí)間復(fù)雜度為 O(logn)组贺。
空間復(fù)雜度: O(1), 只使用了常數(shù)空間祖娘。
題目來源:LeetCode
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掀潮,隨后出現(xiàn)的幾起案子琼富,更是在濱河造成了極大的恐慌,老刑警劉巖鞠眉,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異出皇,居然都是意外死亡哗戈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門纱注,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狞贱,你說我怎么就攤上這事〕饴耍” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵顶掉,是天一觀的道長(zhǎng)挑胸。 經(jīng)常有香客問我,道長(zhǎng)茬贵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任老充,我火速辦了婚禮螟左,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胶背。我一直安慰自己,他們只是感情好廷粒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布红且。 她就那樣靜靜地躺著,像睡著了一般暇番。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斤吐,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音和措,去河邊找鬼。 笑死诬留,一個(gè)胖子當(dāng)著我的面吹牛贫母,可吹牛的內(nèi)容都是我干的文兑。 我是一名探鬼主播腺劣,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼籍铁!你這毒婦竟也來了趾断?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤增显,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后同云,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腮恩,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡温兼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荡含。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片届垫。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖装处,靈堂內(nèi)的尸體忽然破棺而出浸船,到底是詐尸還是另有隱情寝蹈,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布封字,位于F島的核電站耍鬓,受9級(jí)特大地震影響阔籽,放射性物質(zhì)發(fā)生泄漏牲蜀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一项贺、第九天 我趴在偏房一處隱蔽的房頂上張望峭判。 院中可真熱鬧开缎,春花似錦林螃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谨设。三九已至,卻和暖如春扎拣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背二蓝。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工指厌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踩验。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衙传,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蓖捶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容