你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。
假設你有 n 個版本 [1, 2, …, n],你想找出導致之後所有版本出錯的第乙個錯誤的版本。
你可以通過呼叫 bool isbadversion(version) 介面來判斷版本號 version 是否在單元測試**錯。實現乙個函式來查詢第乙個錯誤的版本。你應該儘量減少對呼叫 api 的次數。
示例:給定 n = 5,並且 version = 4 是第乙個錯誤的版本。
呼叫 isbadversion(3) -> false
呼叫 isbadversion(5) -> true
呼叫 isbadversion(4) -> true
所以,4 是第乙個錯誤的版本。
解題思路:
本題是個查詢類問題。可以理解為找出類似序列[0 0 0 1 1 1]中第乙個值為 1 的元素的下標。採用二分查詢求解。
解題時,可以自己想一些測試用例,然後再思考解題思路。
python:
用到了遞迴,比較費時。
# 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
"""#二分查詢
if not isbadversion(n):
return none
if isbadversion(1):
return 1
return self.search2(1, n)
def search2(self, start, end):
if start == end:
return start
mid = (start + end)//2
if isbadversion(mid):
m = self.search2(start, mid) #為什麼不是mid -1
else:
m = self.search2(mid+1, end) #mid+1換成mid行嗎
return m
貼乙個大神(it_job)o(logn)時間複雜度的:
# 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=0;right=n
while(true):
mid=(left+right)//2
if isbadversion(mid)==false and isbadversion(mid+1)==true:
return mid+1
elif isbadversion(mid)==false and isbadversion(mid+1)==false:
left=mid
elif isbadversion(mid)==true and isbadversion(mid+1)==true:
right=mid
c++
方法一:
// forward declaration of isbadversion api.
bool isbadversion(int version);
class solution
else
}return left;
}};
第乙個錯誤的版本
leetcode鏈結 你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。假設你有n個版本 1,2,n 你想找出導致之後所有版本出錯的第乙個錯誤的版本。你可以通過呼叫bool isb...
第乙個錯誤的版本
你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。假設你有 n 個版本 1,2,n 你想找出導致之後所有版本出錯的第乙個錯誤的版本。你可以通過呼叫 bool isbadversio...
第乙個錯誤的版本
你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。假設你有 n 個版本 1,2,n 你想找出導致之後所有版本出錯的第乙個錯誤的版本。你可以通過呼叫 bool isbadversio...