当前位置:网站首页>LeetCode每日两题02:第一个错误的版本 (均1200道)方法:二分查找
LeetCode每日两题02:第一个错误的版本 (均1200道)方法:二分查找
2022-08-09 01:13:00 【那人独钓寒江雪.】
思路及算法:
因为题目要求尽量减少调用检查接口的次数,所以不能对每个版本都调用检查接口,而是应该将调用检查接口的次数降到最低。
注意到一个性质:当一个版本为正确版本,则该版本之前的所有版本均为正确版本;当一个版本为错误版本,则该版本之后的所有版本均为错误版本。我们可以利用这个性质进行二分查找。
具体地,将左右边界分别初始化为 11 和 nn,其中 nn 是给定的版本数量。设定左右边界之后,每次我们都依据左右边界找到其中间的版本,检查其是否为正确版本。如果该版本为正确版本,那么第一个错误的版本必然位于该版本的右侧,我们缩紧左边界;否则第一个错误的版本必然位于该版本及该版本的左侧,我们缩紧右边界。
这样我们每判断一次都可以缩紧一次边界,而每次缩紧时两边界距离将变为原来的一半,因此我们至多只需要缩紧 O(\log n)O(logn) 次。
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int left = 1, right = n;
while (left < right) {
// 循环直至区间左右端点相同
int mid = left + (right - left) / 2; // 防止计算时溢出
if (isBadVersion(mid)) {
right = mid; // 答案在区间 [left, mid] 中
} else {
left = mid + 1; // 答案在区间 [mid+1, right] 中
}
}
// 此时有 left == right,区间缩为一个点,即为答案
return left;
}
}
边栏推荐
- 模型冻结对应层参数freeze
- DataNode重启
- 理财产品募集期和开放期有什么区别?
- Use jdbc to handle MySQL's utf8mb4 character set (transfer)
- Early departure, learning source half a year, finally got the ants Offer to share the interview process
- 卷积神经网络EfficentNet v1学习记录--Model Scaling
- Sencha Touch延迟加载模块中的小类提高程序进入每个模块时性能
- Dapr学习(4)之eShopOnDapr部署(Rancher2.63&k3s)
- Pinctrl 子系统简介
- 4-11 Matplotlib 配置
猜你喜欢
4-6 Matplotlib库 饼图
观察者模式
在实际工作中如何开展性能测试?
『Another Redis DeskTop Manager』用了这款Redis可视化工具,分析效率提升12倍
Non-major graduates, five-faced Ali: Four rounds of technical + HR have already taken an offer
Rollup 编译资源离不开 plugin
4-10 Matplotlib 多图布局
Network In Network学习记录
【Fiddler】Fiddler实现mock测试(模拟接口数据)
A double non-programmer interviewed Ant, Meituan, Ctrip and other big companies with offers to share the interview process
随机推荐
JSON basics, transfer JSON data, and introduce four mainstream frameworks, jackson, gson, fastjson, and json-lib!
大计算量优化方法总结
425 Can‘t open data connection for transfer of “/“
Use Ehcache distributed cache to easily create commercial-grade high-concurrency, high-performance API interfaces!
微信企业号开发之获取公共域名
Sencha Touch页面跳转创建返回上一级按钮的设计思路
Wireshark抓包工具
JSON基础,传递JSON数据,介绍jackson、gson、fastjson、json-lib四种主流框架!
【科研-学习-pytorch】3-分类问题
ffplay播放控制
微信企业号开发之接收响应消息
[Cellular Automata] Simulation of emergency evacuation of disaster personnel under social force factors based on cellular automata with matlab code attached
生成一系列随机字符串的文件
Qt中QFile、QByteArray QDataStream和QTextStream区别
VS中如何添加依赖的库
Sencha Touch延迟加载模块提高程序启动时性能
Rollup 编译资源离不开 plugin
模型冻结对应层参数freeze
JD.com was abused on three sides. Regarding redis, high concurrency, and distributed, I am confused.
深度学习模型的两种部署:ONNX与Caffe