LeetCode 278 第一個錯誤的版本
阿新 • • 發佈:2020-09-17
LeetCode 278 第一個錯誤的版本
問題描述:
你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。
假設你有 n 個版本 [1, 2, ..., n],你想找出導致之後所有版本出錯的第一個錯誤的版本。
你可以通過呼叫 bool isBadVersion(version) 介面來判斷版本號 version 是否在單元測試中出錯。實現一個函式來查詢第一個錯誤的版本。你應該儘量減少對呼叫 API 的次數。
執行用時:21 ms, 在所有 Java 提交中擊敗了20.60%的使用者
記憶體消耗:35.4 MB, 在所有 Java 提交中擊敗了69.81%的使用者
二分: 找到第一次出現true的位置
public class Solution extends VersionControl { public int firstBadVersion(int n) { if(n==1) { return 1; } //類比: 尋找目標值在排序陣列中第一次出現位置 int left = 1, right = n; int mid = left + (right-left)/2; while(left<right) { if(isBadVersion(mid)) { if(mid>0 && isBadVersion(mid-1)) { right = mid-1; } else { return mid; } } else { left = mid+1; } mid = left + (right-left)/2; } return mid; } }