leeCode 278

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

public class Solution extends VersionControl {

public int firstBadVersion(int n) {

int left = 1;

int right = n;

while (left < right) {

int mid = left + (right - left) / 2;

if (isBadVersion(mid)) {

right = mid;

} else {

left = mid + 1;

}

}

return left;

}

}

原文地址:https://www.cnblogs.com/AndyLin/p/12200773.html

时间: 2024-08-07 03:28:09

leeCode 278的相关文章

leecode 278 数值溢出感想

278是一道很简单的题,二分查找而已. 不过它却提醒了我一个很重要的事情,数值溢出问题. int begin, end; 乍一看 (begin + end) / 2 与 begin + (end - begin) /2 没什么区别. 可是 前者可能溢出,后者却不会溢出. 所以尽量用begin + (end - begin) /2. 由此推想, 所有的加法,减法,乘法都可能造成溢出. 有精巧的设计固然重要,可最重要的是在做数值运算时清楚数值的范围.

Codeforces Round #278 (Div. 2) b

/**  *  * @brief Codeforces Round #278 (Div. 2) b  * @file b.c  * @author mianma  * @created 2014/11/24 17:52  * @edited  2014/11/18 17:52  * @type brute  *   * @note   *          declare k >= 0;  *              then   *                  x1 = k  *   

荷兰国旗问题 划分成3部分 leecode

1 public class Solution { 2 public void sortColors(int[] A) { 3 int len=A.length; 4 int beg=0; 5 int end=len-1; 6 int cur=0; 7 while(cur<=end){ 8 if(A[cur]==0) 9 { 10 swap(A,cur,beg); 11 beg++; 12 cur++; 13 14 15 } 16 else if(A[cur]==1) 17 { 18 cur++

&lt;swustoj&gt;?id=278 计分规则

链接http://acm.swust.edu.cn/problem/278/ #include <stdio.h> int main() { int i,n; scanf("%d",&n); int a[105]; for(i=0;i<n;i++) { scanf("%d",&a[i]); } int sum=0,min=a[0],max=a[0]; for(i=0;i<n;i++) { sum=sum+a[i]; if(a[

非递归实现先序遍历 java leecode 提交

写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse第一种方式:数据结构书上的,使用栈大概思路.1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈.2.因为栈顶的节点的左孩子为空,所以栈顶的的节点的左子树肯定访问完毕,所以出栈后直接指向右孩子.其实这里面有个思想迭代和递归的本质相同之处是什么?以后会写一篇我的思考. public class Solution { public List<Integer> preorderTraversal(T

后续遍历 java leecode

以前觉得后续遍历最难写,今天看了篇博客http://blog.csdn.net/sgbfblog/article/details/7773103,其实却是我们仔细比较后续遍历和先序遍历,其实后续遍历就是按照  根右左 的方式先序访问然后逆序就是答案了,会先序就会逆序了 leecode 的AC代码: public class Solution { public List<Integer> postorderTraversal(TreeNode root) { ArrayList<Integ

LeetCode 278 First Bad Version

LeetCode  278 First Bad Version // Forward declaration of isBadVersion API. bool isBadVersion(int version); int firstBadVersion(int n) { int start=1, end=n; while(start < end) { int mid=start+(end-start)/2; if(isBadVersion(mid)) end=mid; else start=m

【UTR #2】[UOJ#278]题目排列顺序 [UOJ#279]题目交流通道 [UOJ#280]题目难度提升

[UOJ#278][UTR #2]题目排列顺序 试题描述 "又要出题了." 宇宙出题中心主任 -- 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 n 道题,吉米多出题斯基需要决定这些题目的难度,然后再在汪洋大海中寻找符合该难度的题目. 题目的难度可以用一个 1 到 n 的排列 a1,-,an 表示,其中 ai 表示第 i 道题目在这 n 道题目中是第 ai 简单的题目,即恰有 ai?1 道题目比第 i 道题目简单. 经验丰富的吉米多出题斯基早就悟出了一种科学地决定难

leecode 归并排序 链表(java)

写了好久,终于写成了.第一次zai leecode错题,题目质量很高,适合面试,与 1.归并排序是稳定的,在java中 Arrays.sort(a);中对于对象的排序就是归并排序.对于原子类型数据使用的是快排. 2.算法复杂度,我们都知道归并排序的最好最坏最差复杂度为nlogn,空间复杂度为n,在链表当中,空间复杂度j降为O(1). 3.写链表的排序 1.分: 使用书上的快慢指针来获得中间节点,分割成2个链表 2.和: 将两个链表合成一个,比较简单 3. 主程序 ListNode lmerge(