本文主要是介绍LeetCode 278,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:https://leetcode.com/problems/first-bad-version/description/
大概题意就是在n个版本中找出第一个bad version(若为bad version,bool isBadVersion(version) 的结果为true)
这题刚开始就挂了,是因为有可能存在第一个版本就是bad version,也有可能是最后一个版本是bad version,而二分法无法检测到首尾两数,所以要单独判断。
bool isBadVersion(int version);int firstBadVersion(int n) {int l,r,mid,ans;l = 1;r = n;if(isBadVersion(1)) return 1;if(isBadVersion(n) && !isBadVersion(n-1)) return n;while(l < r){mid = l / 2 + r / 2;if(!isBadVersion(mid)){l = mid + 1;}else{if(!isBadVersion(mid-1)){ans = mid;break;}r = mid;}}return ans;
}
mid = l / 2 + r / 2是因为直接 (l+r)/ 2 可能会超过int范围。
这篇关于LeetCode 278的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!