leetcode(二分查找算法专题)

二分模板一共有两个,分别适用于不同情况。
算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

* 其中mid需要在while内部进行更新

* 最小R,最大L , R来加,L来减

C++ 代码模板:

// 整数二分算法模板bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;    // check()判断mid是否满足当前条件最小值性质else l = mid + 1;}return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{while (l < r){int mid = l + r + 1 >> 1;if (check(mid)) l = mid;   // check()判断mid是否满足当前条件最大值性质else r = mid - 1;}return l;
}

69. x 的平方根

思路:使用二分法,因为是向下取整,即满足向下取整的最大性质

class Solution {
public:int mySqrt(int x) {int l = 0, r = x;while(l < r){long mid = (l + r + 1ll) >> 1;if(mid * mid <= x) l = mid;else r = mid - 1;}return l;}
};



33. 搜索旋转排序数组

思路:使用两段二分

class Solution {
public:int search(vector<int>& nums, int target) {if (nums.empty()) return -1;int l = 0, r = nums.size() - 1;while (l < r) {int mid = l + r + 1 >> 1;if (nums[mid] >= nums[0]) l = mid;else r = mid - 1;}if (target >= nums[0]) l = 0;else l = r + 1, r = nums.size() - 1;while (l < r) {int mid = l + r >> 1;if (nums[mid] >= target) r = mid;else l = mid + 1;}if (nums[r] == target) return r;return -1;}
};

34. 在排序数组中查找元素的第一个和最后一个位置

解题思路:使用二分法,二分出左右区间两个满足的位置,然后返回结果

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.empty())return {-1,-1};int l = 0 , r = nums.size() - 1;while( l < r){int mid = (l + r) >> 1;if(nums[mid]>=target)r = mid;else l = mid + 1;}if(nums[r] != target) return{-1,-1};int start = r;l = 0,r = nums.size() - 1;while(l < r){int mid = (l + r + 1) >> 1 ;if(nums[mid] <= target) l = mid;else r = mid - 1;}int end  = r;return {start , end};}
};



35. 搜索插入位置

解题思路:二分,找到寻找满足性质的最小部分。

class Solution {
public:int searchInsert(vector<int>& nums, int target) {if(nums.empty())return 0;  int l = 0, r = nums.size();while(l < r){int mid = l + r >> 1;//需要找到的x和target的关系是x是>=target右侧最小的一个if(nums[mid]>=target)r = mid;else l = mid + 1;}return l;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 完全复制div中的内容_LOL手游现在远非完全体,未来还有哪些端游内容会加入手游中?...

LOL手游上线已经有一段时间了&#xff0c;虽然绝大多数情况下LOL端游的内容被继承到了手游当中&#xff0c;但是仍然有一部分端游的内容尚未出现在手游之内。今天小编就带领大家来盘点一下&#xff0c;那些未来可能出现在手游当中的端游内容。排位赛ban选英雄机制Moba游戏排位赛…

因此,Oracle杀死了java.net

好吧&#xff0c;还没有……但是他们宣布要在2017年5月之前关闭java.net和 kenai。JohnK . Waters 在ADTmag的Kenai和java.net的“ Sunset”一文中接受了我的采访。 由于Oracle很少提供有关已经托管在java.net上的关键项目会发生什么的信息&#xff0c;因此本文中编写的大部分…

【Python科学计算系列】概率论与数理统计

计算排列数 def arrangement(n, m):if n m:return math.factorial(n)else:return math.factorial(n) / math.factorial(n - m) 计算组合数 def arrangement(n, m):return math.factorial(n) / (math.factorial(m) * math.factorial(n - m))

proc编译手册_Expect 手册 中文版

Expect 手册 中文版本文由gunman翻译&#xff0c;在此感谢&#xff5e;EXPECT(1)名字&#xff1a;Expect-----能与交互式程序进行“可程序化”会话的脚本语言大纲&#xff1a;(命令选项概述)expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]概述&#xff1a;Expec…

光盘 机密_使用保险柜管理机密

光盘 机密您如何存储秘密&#xff1f; 密码&#xff0c;API密钥&#xff0c;安全令牌和机密数据属于秘密类别。 那是不应该存在的数据。 在容易猜测的位置&#xff0c;不得以纯文本格式提供。 实际上&#xff0c;不得在任何位置以明文形式存储它。 可以使用Spring Cloud Confi…

OS X下使用OpenGL做离屏渲染

本文为转载内容&#xff0c;原地址 有时&#xff0c;我们想通过GPU做一些视频、图像处理&#xff0c;而处理的结果不需要显示在显示器上&#xff0c;而是直接交给主存&#xff0c;这时候我们可以通过OpenGL的离屏渲染来实现。 由于我们不需要将渲染好的像素显示到屏幕上&…

jpa 循环引用_JPA中按身份引用

jpa 循环引用在上一篇文章中 &#xff0c;我提到我选择通过其主键而不是类型来引用其他聚合。 在处理大型或复杂域模型时&#xff0c;我通常使用这种方法&#xff08;也称为断开域模型&#xff09;。 在本文中&#xff0c;让我尝试进一步解释如何在JPA中完成它。 请注意&#x…

自然辩证法小论文选题_自然辨证法论文题目

与《自然辨证法论文题目》相关的范文2010年研究生课程论文 成绩: 题目:_中西医结合的发展前景_ _ 中西医结合的发展前景 [摘要]立足于中西医结合的现状,从方法论角度,就中西医融合的时间进行了探讨.中西医结合,是在我国既有传统的中医药学,又有现代的西医药学的特定环境和条件下…

Leetcode 14.最长公共前缀

原题链接 解题思路: 1.本题使用模拟法 2.取第一个字符串的首元素&#xff0c;与剩余字符串对应位置相比较&#xff0c;如果全部相等将此字符加入结果中&#xff0c;继续到下一个字符一次比较&#xff0c;直至出现不相同的位置&#xff0c;返回结果。 3.需要注意每个字符串是…

aws lambda_带有API网关的AWS Lambda

aws lambda在上一篇文章中&#xff0c;我向您展示了如何创建和部署AWS Lambda。 我们将继续这项工作&#xff0c;并只考虑更新该lambda的代码。 我们还将使用AWS API Gateway将REST端点添加到AWS Lambda。 因此&#xff0c;在继续之前……&#xff08;如果还没有&#xff09;&…

git pull不同步_git回退版本,再返回最新分支git pull失败的解决经验

本文转载自【微信公众号&#xff1a;羽林君&#xff0c;ID&#xff1a;Conscience_Remains】总述一篇解决gti分支切换问题的文章&#xff0c;大家应该都有过这种情况&#xff0c;就是git最新的代码进行编译的时候&#xff0c;发现最新代码有bug&#xff0c;有些不确认问题点&am…

junit5 动态测试_JUnit 5 –动态测试

junit5 动态测试在定义测试时&#xff0c;JUnit 4有一个很大的弱点&#xff1a;它必须在编译时发生。 现在&#xff0c;JUnit 5将解决此问题&#xff01; Milestone 1 刚刚发布 &#xff0c;它带有全新的动态测试&#xff0c;可以在运行时创建测试。 总览 本系列中有关JUnit 5…

ioc spring 上机案例_通过实例解析Spring Ioc项目实现过程

0. Ioc主要是实现一个控制反转&#xff0c;耦合性大大降低。1. 建maven项目建立一个空的maven项目&#xff0c;然后pom.xml添加spring-context的依赖:org.springframeworkspring-context5.2.7.RELEASE2. 创建pojo java对象package com.aca;public class Hello {private String …

C++ 11 深度学习(十)原始字面量

你是否曾经为了各种json格式无法写入string中而烦恼&#xff0c;为了各种转义而烦恼。如下图 c11为我们带来了全新的解决方法 其新特性为使用. R"(xxxxxxxxxxxx)" ,此种形式可以使得以原有形式进行表现出来

java日期时间转日期_Java时间和日期指南

java日期时间转日期长期以来&#xff0c;正确处理日期&#xff0c;时间&#xff0c;时区&#xff0c;夏令时&#xff0c;and年等一直是我的烦恼。 本文并不是一个全面的指南时域&#xff0c;请参阅日期和时间在Java中 -更详细&#xff0c;但略有下降&#xff0c;ekhem&#xff…

linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法

tcpdump与WireShark是Linux下的两个常用&#xff0c;功能强大的抓包工具&#xff0c;下面列出这两个工具的简单用法。tcpdump用法tcpdump用法&#xff1a;sudo tcpdump -i ens33 src 192.168.0.19 port 80 -xx -Xs 0 -w test.capsudo tcpdump -i ens33 src port 80 -xx -Xs 0 -…

C++ 11 深度学习(十一)final和override

1. final C 中增加了 final 关键字来限制某个类不能被继承&#xff0c;或者某个虚函数不能被重写&#xff0c;和 Jave 的 final 关键字的功能是类似的。如果使用 final 修饰函数&#xff0c;只能修饰虚函数&#xff0c;并且要把final关键字放到类或者函数的后面。 1.1 修饰函数…

交流伺服系统设计指南_交流设计

交流伺服系统设计指南软件设计至关重要。 它是应用程序的基础。 就像蓝图一样&#xff0c;它为所有背景的聚会提供了一个通用平台。 它有助于理解&#xff0c;协作和发展。 设计不应仅视为开发的要素。 它不应该仅仅存在于开发人员的脑海中&#xff0c;否则团队将发现它几乎无…

【前缀和与差分】

前缀和 前缀和的作用&#xff1a;快速计算数组中某一段区间内的总和 1.需要两个额外的数组&#xff0c;来存储原始数据的数组 和 计算过前缀的数组。其原理为前缀和的数组中每个元素用来保存前i个原数组中的和&#xff0c;下一个元素更新就采用s[i] s[i] - 1 a [i] 来持续更…