LeetCode初級算法--排序和搜索01:第一個錯誤的版本
一、引子
這是由LeetCode官方推出的的經(jīng)典面試題目清單~
這個模塊對應(yīng)的是探索的初級算法~旨在幫助入門算法。我們第一遍刷的是leetcode推薦的題目。
二、題目
你是產(chǎn)品經(jīng)理,目前正在帶領(lǐng)一個團隊開發(fā)新的產(chǎn)品。不幸的是,你的產(chǎn)品的最新版本沒有通過質(zhì)量檢測。由于每個版本都是基于之前的版本開發(fā)的,所以錯誤的版本之后的所有版本都是錯的。
假設(shè)你有 n 個版本 [1, 2, ..., n],你想找出導(dǎo)致之后所有版本出錯的第一個錯誤的版本。
你可以通過調(diào)用 bool isBadVersion(version) 接口來判斷版本號 version 是否在單元測試中出錯。實現(xiàn)一個函數(shù)來查找第一個錯誤的版本。你應(yīng)該盡量減少對調(diào)用 API 的次數(shù)。
示例:
給定 n = 5,并且 version = 4 是第一個錯誤的版本。
調(diào)用 isBadVersion(3) -> false
調(diào)用 isBadVersion(5) -> true
調(diào)用 isBadVersion(4) -> true
所以,4 是第一個錯誤的版本。
1、思路
首先我們可以想到的就是把整個列表都順序遍歷一遍,第一次調(diào)用接口出現(xiàn)False的下一個為True的就是我們要求的值,但是這個算法會超時。
我們使用二分查找:
我們要尋找第一個錯誤版本,也就是要保留最后一個false之后的第一個true。所以在更新邊界的時候,右邊界就不用減1了,這樣最后當(dāng)左右相等時一定是第一個true。
2、編程實現(xiàn)
# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):
class Solution:
def firstBadVersion(self, n):
"""
:type n: int
:rtype: int
"""
left = 1
right = n
while left
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!
審核編輯 黃昊宇
-
人工智能
+關(guān)注
關(guān)注
1806文章
48984瀏覽量
248885 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8500瀏覽量
134503 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5560瀏覽量
122748 -
leetcode
+關(guān)注
關(guān)注
0文章
20瀏覽量
2446
發(fā)布評論請先 登錄
HRTIM變頻控制輸出的第一個周期頻率異常的原因?
HRTIM變頻控制輸出的第一個周期頻率異常的原因?
ADS1274用DRDY+TDM輸出模式下,讀到的第一個字節(jié)是無效的,為什么?
TimSort:一個在標(biāo)準(zhǔn)函數(shù)庫中廣泛使用的排序算法
藍(lán)橋杯的第一個項目,點亮一個LED

ADS1299在DAISY-CHAIN模式下只能配置第一個AD嗎,那后面幾個都是要怎么配置寄存器,都和第一個一樣嗎?
DAC8734只能把第一個接收到的數(shù)字?jǐn)?shù)據(jù)輸出,有哪些原因?qū)е碌哪兀?/a>
ADS1194標(biāo)識芯片的第一個只讀寄存器讀取數(shù)據(jù)數(shù)據(jù)錯誤,為什么?
韓國無晶圓廠初創(chuàng)公司Panmnesia展示第一個支持CXL的AI集群
ADS131A04在復(fù)位后以READY字進行響應(yīng),在第一個幀中接收到的響應(yīng)不正確,為什么?
ADS127L01讀取ADC數(shù)據(jù)時DOUT在DRDY拉低之前或第一個SCLK到來之前就已經(jīng)開始切換,為什么?
LMK1C1104第一個cycle在CLKOUT中丟失,為什么?
時間復(fù)雜度為 O(n^2) 的排序算法

評論