实现一个函数来查找第一个错误的版本

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

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

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

总结:
1.注意终止的条件
2.以及 mid = low + (high - low)/2mid = (low + high)/2 两者是等价的
只是换了一个形式,防止int越界,超时!
3.由于在数据结构,二分查找学过,所以问题没有遇见多少,就是2提到的超时

/**The isBadVersion API is defined in the parent class VersionControl.
     boolean isBadVersion(int version); */
    public int firstBadVersion(int n) {
        int low = 1, high  = n;
        int mid;
        while (low <= high){
            mid = low + (high - low)/2;
//            如果中间那个是坏的
            if (isBadVersion(mid)){
                if (isBadVersion(mid-1) == false){
                    return mid;
                }else{
                    high = mid - 1;
                }
            }else {
//                中间那个是好的
                if (isBadVersion(mid + 1)){
                    return mid+1;
                }else{
                    low = mid + 1;
                }
            }

        }
        return -1;
    }

古之大化者,乃与无形俱生。反以观往,复以验来;反以知古,复以知今;反以知彼,复以知此。动静虚实之理不合于今,反古而求之。事有反而得复者,圣人之意也,不可不察。

人言者,动也。己默者,静也。因其言,听其辞。言有不合者,反而求之,其应必出。

言有象,事有比;其有象比,以观其次。

象者,象其事。比者,比其辞也。以无形求有声。其钓语合事,得人实也。其犹张□纲而取兽也。多张其会而司之,道合其事,彼自出之,此钓人之纲也。常持其纲驱之。

己反往,彼复来,言有象比,因而定基,重之、袭之、反之、复之,万事不失其辞。圣人所愚智,事皆不疑。

翻译:
在古代能以“大道”来化育万物的圣人,其所作所为都能与自然的发展变化相吻全。反顾以追溯既往,再回首以察验未来;反顾以考察历史,再回首以了解当今;反 顾以洞察对方,再回首以认识自我。动静、虚实的原则,如果在未来和今天都得不到应用,那就要到过去的历史中去考察前人的经验。有些事情是要反复探索才能把 握的,这是圣人的见解,不可不认真研究。

人家说话,是活动;自己缄默,是静止。要根据别人的言谈来他的辞意。如果其言辞有矛盾之处,就反复诘难,其应对之矢就要出现。语言有可以模拟的形态,事物 有可以类比的规范。既有“象”和“比”存在,就可以预见其下一步的言行。所谓“象”就是模仿事物,所谓“比”,就是类比言辞。然后以无形的规律来探求有声 的言辞。引诱对方说出的言辞,如果与事实相一致,就可以刺探到对方的实情。这就像张开网捕野兽一样,要多设一些网,江集在一起来等待野兽落入。如果把捕野 兽的这个办法也能应用到人事上,那么对方也会自己出来的,这是钓人的“网”。但是,如果经常拿着“网”去追逐对方,其言辞就不再有平常的规范,这时就要变 换方法,用“法象”来使对手感动,进而考察对方的思想,使其暴露出实情,进而控制对手。自己返过去,使对手返回来,所说的话可以比较类推了,心里就有了底 数。向对手一再袭击,反反复复,所有的事情都可以通过说话反映出来,圣人可以诱惑愚者和智者,这些不必再怀疑。

2021年10月1日

题目来源链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnto1s/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值