[簡單] 704. 二分查找

歡迎關注 leetcode 專欄

題目

給定一個 n 個元素有序的(升序)整型數(shù)組 nums 和一個目標值 target 雷激,寫一個函數(shù)搜索 nums 中的 target把敞,如果目標值存在返回下標,否則返回 -1嘀粱。

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現(xiàn)在 nums 中并且下標為 4

示例 2:

輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假設 nums 中的所有元素是不重復的住诸。
  2. n 將在 [1, 10000]之間刺啦。
  3. nums 的每個元素都將在 [-9999, 9999]之間。

鏈接:https://leetcode-cn.com/problems/binary-search

解法

常規(guī)解法

class Solution:
    def search(self, nums: list, target: int) -> int:
        left, right = 0, len(nums) - 1
        while left <= right:
            middle = left + (right - left) // 2
            if nums[middle] < target:
                left = middle + 1
            elif nums[middle] > target:
                right = middle - 1
            else:
                return middle
        return -1

空間復雜度 O(1)军洼,只是額外申請了幾個變量的空間玫荣。
時間復雜度 O(logn)甚淡,就是二分查找的復雜度,2^k = n —— k ∝ logn捅厂。

遞歸解法

class Solution:
    def search(self, nums: list, target: int) -> int:    
        return self.get_index(nums, target, 0, len(nums) - 1)
    
    def get_index(self, nums, target, left, right):
        if left > right: return -1
        middle = left + (right - left) // 2
        if nums[middle] < target:
            return self.get_index(nums, target, middle + 1, right)
        elif nums[middle] > target:
            return self.get_index(nums, target, left, middle - 1)
        else:
            return middle

空間復雜度 O(logn)贯卦,最差情況下遞歸的深度就是logn。
時間復雜度 O(logn)焙贷,不變撵割。

image.png

Python專屬解法

又到了 Python 的作弊時間了……

class Solution:
    def search(self, nums: list, target: int) -> int:    
        try:
            return nums.index(target)
        except ValueError:
            return -1

更多刷題,盡在 leetcode 專欄

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辙芍,一起剝皮案震驚了整個濱河市啡彬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌故硅,老刑警劉巖庶灿,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異契吉,居然都是意外死亡跳仿,警方通過查閱死者的電腦和手機诡渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門捐晶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妄辩,你說我怎么就攤上這事惑灵。” “怎么了眼耀?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵英支,是天一觀的道長。 經(jīng)常有香客問我哮伟,道長干花,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任楞黄,我火速辦了婚禮池凄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鬼廓。我一直安慰自己肿仑,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尤慰,像睡著了一般馏锡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伟端,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天杯道,我揣著相機與錄音,去河邊找鬼责蝠。 笑死蕉饼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的玛歌。 我是一名探鬼主播昧港,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼支子!你這毒婦竟也來了创肥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤值朋,失蹤者是張志新(化名)和其女友劉穎叹侄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昨登,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡趾代,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丰辣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撒强。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖笙什,靈堂內(nèi)的尸體忽然破棺而出飘哨,到底是詐尸還是另有隱情,我是刑警寧澤琐凭,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布芽隆,位于F島的核電站,受9級特大地震影響统屈,放射性物質(zhì)發(fā)生泄漏胚吁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一愁憔、第九天 我趴在偏房一處隱蔽的房頂上張望腕扶。 院中可真熱鬧,春花似錦惩淳、人聲如沸蕉毯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽代虾。三九已至进肯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棉磨,已是汗流浹背江掩。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乘瓤,地道東北人环形。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像衙傀,于是被迫代替她去往敵國和親抬吟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360