2、leetcode278 第一个错误的版本**
leetcode 278 第一個(gè)錯(cuò)誤的版本
你是產(chǎn)品經(jīng)理,目前正在帶領(lǐng)一個(gè)團(tuán)隊(duì)開發(fā)新的產(chǎn)品。不幸的是,你的產(chǎn)品的最新版本沒有通過質(zhì)量檢測(cè)。由于每個(gè)版本都是基于之前的版本開發(fā)的,所以錯(cuò)誤的版本之后的所有版本都是錯(cuò)的。
假設(shè)你有 n 個(gè)版本 [1, 2, …, n],你想找出導(dǎo)致之后所有版本出錯(cuò)的第一個(gè)錯(cuò)誤的版本。
你可以通過調(diào)用 bool isBadVersion(version) 接口來判斷版本號(hào) version 是否在單元測(cè)試中出錯(cuò)。實(shí)現(xiàn)一個(gè)函數(shù)來查找第一個(gè)錯(cuò)誤的版本。你應(yīng)該盡量減少對(duì)調(diào)用 API 的次數(shù)。
示例 1:
輸入:n = 5, bad = 4
輸出:4
解釋:
調(diào)用 isBadVersion(3) -> false
調(diào)用 isBadVersion(5) -> true
調(diào)用 isBadVersion(4) -> true
所以,4 是第一個(gè)錯(cuò)誤的版本。
示例 2:
輸入:n = 1, bad = 1
輸出:1
文章目錄
- leetcode 278 第一個(gè)錯(cuò)誤的版本
- 二分法一
- 二分法二
二分法一
這題相比于leetcode 704題稍微有點(diǎn)難度,leetcode 704
public int firstBadVersion(int n) {int left=1;int right=n;while(left<right){int mid=left+((right-left)>>1);//是壞的版本,right賦值為mid;right可不可以賦值right=mid-1?//可以,但是while循環(huán)中的條件就需要改變,見方法二。因?yàn)閣hile循環(huán)// 中的條件是left<right,即當(dāng)left==right時(shí)退出循環(huán),也就是left或// 者right即為答案;// 因?yàn)轭}目要找第一個(gè)壞的版本的序號(hào),所以心里要有一種無限逼近的思// 想,當(dāng)mid是壞的版本,right就賦值為mid,但是不return,繼續(xù)逼// 近;當(dāng)?shù)诙喲h(huán)mid不是壞的版本,我們就需要將left賦值為mid+1,// 因?yàn)閙id肯定不是壞的版本,所以left不賦值mid。// 最后一次循環(huán)比如left=5,right=6,mid算出為5;當(dāng)5為壞的版本時(shí),// right賦值mid等于5;當(dāng)5不是壞的版本時(shí),left=mid+1=6;// 不論哪種情況都滿足left==right,所以退出循環(huán),返回left或者right。if(isBadVersion(mid)){right=mid;}else{//不是壞的版本left=mid+1;}}return right; //或者返回left都可以}二分法二
public int firstBadVersion(int n) {int left=1;int right=n;//while條件這么寫其實(shí)給自己增加麻煩了,但是為了掌握二分法,大家可以都試試。//這邊條件結(jié)束是left>right,也就是left==right+1退出循環(huán)while(left<=right){int mid=left+((right-left)>>1);//當(dāng)mid是壞的版本,right=mid-1;但是這么寫可能錯(cuò)過最終答案,//比如版本中只有最后一個(gè)版本是錯(cuò)的,那right=mid-1就有可能錯(cuò)過;//但是要注意while循環(huán)中的條件是left>right,即left==right+1退出循環(huán);//我們最后的答案返回的是left,也就是right+1,所以這一減一加又到 了正確答案。if(isBadVersion(mid)){right=mid-1;}else{left=mid+1;//不是壞的版本}}return left;//這邊只能返回left}總結(jié)
以上是生活随笔為你收集整理的2、leetcode278 第一个错误的版本**的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1、leetcode704 二分查找*
- 下一篇: 3、leetcode35 搜索插入位置*