当前位置: 首页 > news >正文

LeetCode -- First Bad Version

题目描述:


You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad.


Suppose you have n versions [1, 2, ..., n] and you want to find out the first bad one, which causes all the following ones to be bad.


You are given an API bool isBadVersion(version) which will return whether version is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.


在从1到n的版本号中,找到第1个坏版本,已知如果第i个版本为坏版本,那么从i+1到n的版本都是坏版本。


思路:
又是一道二分查找题目,应用二分查找思路加入一些特殊逻辑处理即可:
1. 如果当前版本是坏版本:
1.1 上一个版本不是坏版本,返回当前版本
1.2 否则,向左找
2. 如果当前版本不是坏版本:
2.1 下一个版本为坏版本,返回下一个版本
2.2 否则,向右找


最后分别判断左右版本是否则坏版本即可。


注意中间索引m需要写成:
var m = (int)(l/2.0 + r/2.0); 
这样做是防止一些大数字加运算越界。


实现代码:


/* The isBadVersion API is defined in the parent class VersionControl.
      bool IsBadVersion(int version); */


public class Solution : VersionControl {
    public int FirstBadVersion(int n) 
    {
        var l = 0;
    	var r = n;
    	
    	while(l < r - 1){
    		var m = (int)(l/2.0 + r/2.0);
    		var mBad = IsBadVersion(m);
    		if(mBad)
    		{	
    			if(!IsBadVersion(m-1)){
    				return m;	
    			}
    			else{
    				r = m;
    			}
    		}
    		else{
    			if(IsBadVersion(m+1)){
    				return m+1;	
    			}
    			else{
    				l = m;
    			}
    		}
    	}
    	var leftBad = IsBadVersion(l);
    	var rightBad = IsBadVersion(r);
    	
    	if(leftBad){
    		return l;
    	}
    	else if(!leftBad && rightBad){
    		return r;
    	}
    	return -1;
    }
}


相关文章:

  • 本地SPAN和远程SPAN监控原理
  • LeetCode -- House Robber II
  • 打破传统,实战至上的网管师认证
  • LeetCode -- Invert Binary Tree
  • 使用简单ORM开发框架进行快速开发
  • LeetCode -- Largest Number
  • LeetCode -- Length of last word
  • 编程是一种“组合的艺术”
  • LeetCode -- Majority Element II
  • 3G上网卡招标,华为成最大赢家
  • LeetCode -- Nim Game
  • 近期阅读关注(200905)
  • LeetCode -- Pascal's Triangle II
  • LeetCode -- Permutation Sequence
  • FreeBSD中替换系统调用监视系统文件打开记录
  • 【Linux系统编程】快速查找errno错误码信息
  • 345-反转字符串中的元音字母
  • css属性的继承、初识值、计算值、当前值、应用值
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Javascript弹出层-初探
  • JavaScript实现分页效果
  • Java方法详解
  • leetcode388. Longest Absolute File Path
  • react 代码优化(一) ——事件处理
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 不上全站https的网站你们就等着被恶心死吧
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 配置 PM2 实现代码自动发布
  • 浅谈Golang中select的用法
  • 深入 Nginx 之配置篇
  • 算法系列——算法入门之递归分而治之思想的实现
  • 智能合约开发环境搭建及Hello World合约
  • linux 淘宝开源监控工具tsar
  • 积累各种好的链接
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #Linux(make工具和makefile文件以及makefile语法)
  • $.each()与$(selector).each()
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (poj1.2.1)1970(筛选法模拟)
  • (python)数据结构---字典
  • (SpringBoot)第二章:Spring创建和使用
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)创业的注意事项
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .apk文件,IIS不支持下载解决
  • .a文件和.so文件
  • .net 发送邮件
  • .net2005怎么读string形的xml,不是xml文件。