首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

oj刷题——双指针篇:双指针的原理和使用场景

前言: 双指针一般在做与数组有关的题是经常容易用到的,在很多场景下都能得到很好的应用,下面我将通过多个多指针的题(力扣上面的),来总结一下双指针的原理和使用场景 需知:我在讲解一个题时主要分为三步:...= [1,2,3] 输出:[1,2,3] 解释:调用函数后,输入的数组将被修改为:[1,2,3] 提示: 1 <= arr.length <= 104 0 <= arr[i] <= 9 题目的重点就是如何在不改变数组长度的情况下将...示例 1: 输入: nums = [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 示例 2: 输入: nums = [...right--; } else left++; } } return ret; } 五、总结 以上就是双指针在...oj刷题中常见的几个题,通过这几个题,我们可以观察到双指针的题在处理数组划分,还有数组操作中经常用到,在我们平时做数组相关的题时要有往双指针这方面想的意识 感谢各位大佬观看,创作不易,还望各位大佬点赞支持

13910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LeetCode | 使用双指针解决11号题

    什么是双指针,我仔细在脑海中回忆了下。哈哈,原谅我这么健忘。 ……(这是关于指针的解释) 哦原来如此。想知道什么是双指针,待会文章结尾处会放出视频给你们欣赏下——坐标x轴下面的两个箭头就是双指针。...两种方法——暴力解决法和双指针法。 暴力解法是简单考虑每对可能出现的线段组合,找出最大的面积就可以了。 ?...双指针法,按官方解释: 将指向较长线段的指针向内侧移动,矩形区域的面积将受限于较短的线段而不会获得任何增加。...但是,在同样的条件下,移动指向较短线段的指针尽管造成了矩形宽度的减小,但却可能会有助于面积的增大。因为移动较短线段的指针会得到一条相对较长的线段,这可以克服由宽度减小而引起的面积减小。...最后使用双指针法去解决的视频供出来,请欣赏!

    1.7K20

    我爱学算法之—— 感受双指针带来的快感(下)

    前言 本篇文章继续来学习双指针算法;继续加油!!! 一、三数之和 15....我们这里借用两数之和中利用双指针算法找和为target的思路;依次固定(从左到右)给定数组中的数字i,然后利用双指针算法,在其右边区间内找到和为-i的两个数,找到返回即可。...查找的三元组完全:对与这个问题,我们在利用双指针算法找到满足要求的数之后,让双指针继续遍历而不是直接结束即可。...其次,双指针算法找到满足条件的元素后,没有直接跳出,而是跳过重复元素继续遍历。 二、四数之和 18....通过学习双指针算法,明显能够感受到双指针算法的优势和其适用场景 首先,就是能够在暴力解法的基础上,将时间复杂度降低一个维度; 其次,双指针算法就适合在数组划分和数组有序时使用; 最后,双指针算法使用起来十分便捷

    7110

    我爱学算法之—— 感受双指针带来的快感(中)

    前言: ​ 欢迎来到我爱学算法系列,本篇接着来学习双指针算法 一、有效的三角形个数 题目链接611....需要判断任意两边之和大于第三边(但是,如果我们已经知道较小的两条边之和已经大于第三边了,那是不是就不用继续判断其他的了) 思路: 有了上面那个优化我们就首先让数组有序 然后从大到小依次选择一个数,再去枚举另外两个数 其次,使用双指针算法...对于双指针算法操作解析: 因为数组已经有序,right指向的是较大的数,如果一个数加上这个数还小于第三个数,那其他的数的比right指向的数小,就不需要再进行判断了,所以直接left++; ​ left...双指针算法优化: 使用暴力枚举肯定是不行的,这里使用双指针算法优化。 (注意: 题目中已经说了商品价格是升序排序的(数组有序,优先想到使用二分和双指针算法))。...数组有序(如果数组无序,就让它先有序 ),这样,我们使用双指针遍历数组; 比较left和right位置的值的和num 与target,如果num>target,那就直接让right--;(因为left指向的是未遍历数中的最小值

    6010

    我爱学算法之 —— 感受双指针带来的快感(一)

    首先来学习 双指针 算法(这里通过一些习题,再实践中锻炼自己的思维,提升自己的算法能力)。 一、移动0 ​ 题目链接:283....(并且要求我们不复制数组,在原数组上进行操作) 算法解析: ​ 对于这道题(以至于,数组划分 这一类题,我们都可以使用双指针算法来做) 思路: ​ 使用两个整数(模拟指针)dest 和cur ,在遍历数组的同时...算法解析: ​ 双指针,fast 和slow 看到这里,可能会有些疑惑,这个题跟双指针有啥关系呢?...而且还是快慢双指针;我知道你很急,但你先别急,接着向下看 ​ 对于一个数,我们先来看一下它的变化过程 ​ 通过观察,我们能发现,无论是不是快乐数,最后都会陷入到一个循环当中去;唯一的区别就是,快乐数最后陷入到了只有...算法解析: ​ 第一次看到这个题,丝毫没有思路(可能会使用暴力解法,但是时间复杂度为o(n^3));不用着急,双指针带你来KO这个题。

    7910

    C:每日一题:双指针法的使用

    题目难度:基础 解题方法:双指针法 一、题目 输入一个整数数组, 实现一个函数来调整该数组中数字的顺序使得 数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。...算法选择:双指针法 选择双指针法是因为它只需要对数组遍历一次即可。时间复杂度较低。 设置两个指针 left 和 right 分别指向数组的头部和尾部。...交换后,left指针后移一位,right 指针前移一位,继续进行下一轮的调整。...i < sz; i++) { printf("%d ", arr[i]); // 输出调整后的数组 } return 0; } 结语: 今天这道题比较简单,我写这道题主要也就是想介绍一个双指针法的使用...后面有时间小编会更新一篇文章来详细介绍一下双指针法,敬请期待!

    10410

    我和双指针的初次亲密邂逅:那一刻心跳加速

    示例 2 输入:height = [1,1] 输出:1 1.2 题目分析 暴力枚举,将所有的情况计算出来,两个for循环 但是这个是会超时的,时间复杂度是O(N^2) 所以我们使用双指针进行解决 利用单调性...,使用双指针来解决问题,遍历一遍数组我们就能解决问题了,时间复杂度是O(N) 一个指针指向最左边,一个指向最右边 我们先算出来一个体积v 这两个指针向内活动 根据两个指针指向的数据的大小进行比较,谁小谁就进行移动...所以我们当10的三角形找到完成之后我们会一个固定值进行计算三角形个数 对于这个题我们的思路如下 : 1.我们先固定最大的数(在数组的最后一个,因为这个数组可以进行排序的操作) 2.在最大的数的左区间内,使用双指针算法...,然后左指针指向0,右指针指向i-1就是倒数第二个数开始 然后我嫩进行一个wile循环的操作 循环的条件就是left得小于right,不能存在越界的情况 在while循环中,我们得判断,如果左指针和右指针指向的数加在一起小于固定的数...暴力枚举直接两个for循环就可以解决了 除了暴力枚举的方法,我们可以利用单调性,使用双指针算法进行解决问题,这个效率也是比暴力枚举更高 具体说明: 我们先定义两个指针,一个left指向我们第一个数

    8810

    为什么我应该使用指针而不是对象本身

    问题 我之前一直使用 Java,现在开始转向 C++。...我发现使用 C++ 的人经常用指针表示对象,比如像下面这样: Object *myObject = new Object; 而不是, Object myObject; 或者在调用成员函数的时候,都会这样...回答 对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。 下面从两个方面来解释: 什么时候该使用 new? 什么时候该使用指针?...当你确实要用动态内存分配的话,我们应该用智能指针或者其它的 RAII 技术来管理这部分资源。 什么时候该使用指针? 不过,除了动态分配内存之外,原始指针还有其它用途。...当然你也可以使用智能指针来封装它,这样使用起来就方便了。

    1.4K10

    vector的使用方法_vector指针如何使用

    大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说vector的使用方法_vector指针如何使用,希望能够帮助大家进步!!! 一、什么是vector?...2.动态数组 支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。...3.能够感知内存分配器的(Allocator-aware) 容器使用一个内存分配器对象来动态地处理它的存储需求。...当前vector分配的大小 10.size 当前使用数据的大小 11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值 12.reserve 改变当前vecotr所分配空间的大小...13.erase 删除指针指向的数据项 14.clear 清空当前的vector 15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1) 16.rend 将vector反转构的结束指针返回

    2.8K20

    长文 | 我如何使用 git

    以下是一个实例,展示了我是如何检查我刚刚做的更改,将它们加入暂存区,以及提交它们的过程: ~/code/projects/tucanty fix-clippy X φ gst # [...]...先快速存档,然后再考虑如何正确地处理。 在我看来,提交和它们在我分支中的历史是可以修改的。只要我还没有请求别人审查,只要它们还属于“我”,我总是可以重写、压缩、重新基线化它们。 为什么?...尽管如此,我始终坚持的一般原则是:我只关心最终的PR,它如何被审查,以及合并后会变成什么样子,而不是导致审查和合并的单个提交。 我会尽早开启PR。一旦我有第一个提交,我就会开启PR。...我尽量在CI通过后再请求审查。除非我已经知道如何修复CI,并且我们可以并行操作——审查者开始审查的同时,我去修复CI。...我如何选择一种策略而不是另一种?这取决于我想要在另一个分支上做的更改的规模,以及我工作目录中未提交的内容有多少。 我对分支名称不太挑剔,只要它们有点意义就行。

    8510

    我觉得面试如果考察「双指针」的话,这题是刚刚好 ...

    2: 输入:nums = [] 输出:[] 示例 3: 输入:nums = [0] 输出:[] 提示: 0 <= nums.length <= 3000 <= nums[i] <= 排序+双指针解法...对数组进行排序,使用三个指针 i、j 和 k 分别代表要找的三个数。...为什么说这是一道好题,因为这是道进阶版「双指针」裸题。 题目本身的思维难度不大,主要是考察各位对「双指针的基本理解」和「编码能力」(侧重点在后者)。 这一类题是部分面试官的最爱。...让人有一种「我明明知道怎么做,但是写不出来的」感觉。 这时候如果我们能很快的将想法转化为代码,并且实现上清晰简洁,能给面试官讲清楚思路,基本上算法这一部分就过了。...为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode。

    46021

    如何使用 ggplot2 绘制双轴分离图?

    如何将下图中的左图(低配版)转化为右图(高配版, x,y 轴分离)。 低配版条形图 首先,构造一个数据集作为样例,读者可以根据自己的数据进行调整即可。假设 y 是分类变量,x 是连续型变量。...这里的细节调整包括:使用 ggthemes 包中的 theme_tufte() 主题,viridis 包的 scale_fill_viridis() 离散配色。...注意:这里将柱子按照类别进行填充,当然你也可以使用另一个变量进行填充(下面会给例子)。...主要细节调整:geom_col() 中的 aes(fill = score),连续性变量填充使用 scale_fill_gradient2() 以及加上了图例。...当然这种技巧也可以使用其他图形中。读者如有需求,可以自行探索。

    1.9K10

    我是如何理解并使用maven的

    前言 一直想写一篇关于Maven的文章,但是不知如何下笔,如果说能使用,会使用Maven的话,一到两个小时足矣,不需要搞懂各种概念。那么给大家来分享下我是如何理解并使用maven的。...第二,象源代码包通常使用 artifactId 作为最后名称的一部分。典型的产品名称使用这个格式; version:项目产品的版本号。...suiteXmlFiles> ---- 如何在...clean:清理输出目录target下生成jar包 compile:编译项目主代码 编译完成后,我们一般都会运行测试代码进行单元测试,虽然很多情况下,我们并没有这么做,但是我还是建议大家通过Maven做一些自动化的单元测试...但是这样拷贝就违背了我们当初想要自动解决依赖的问题,所以如何才能让其它的Maven项目直接引用这个JAR包呢? 我们需要执行mvn clean install命令,执行结果如下: ?

    1.6K30

    我是如何使用Python来自动化我的婚礼的

    最后,邀请卡不是环境友好的,因为它们被一次性使用,并且容易丢失或错放。 回到名单。...(发送给客人的邮件数,稍后它会派上用场) 主要数据输入完成后,我使用gspread来遍历列表,并且发送短信给每一个具有与之相关联的手机号码的客人:Sheets.py import json import...接下来,我使用Flask作为我的web服务器,然后设置我的Twilio消息请求URL指向/messages url,并创建简单的if语句来解析回复 (yes, no):hello_guest.py @app.route...的短信,因此,我决定添加一些功能到我的应用中。 统计!我可以计算现场出席名单并按要求退回,给新娘即使反馈客人名单的成型。...自动化通过提供与我们的客人的直接渠道,以及无数的我可以跟踪、推动以及戳他们回应的不同方式,显然让我的生活更轻松了。

    2.7K80

    如何使用RSS订阅我的博客文章更新

    用户使用RSS阅读器订阅:用户可以通过RSS阅读器软件(如Feedly、Inoreader等)输入这个RSS链接,从而订阅这个网站的更新。...二、RSS订阅源的获取 使用官方或者个人搭建的RSS服务,许多支持RSS订阅的网站会在显眼的位置(如网页底部、侧边栏或头部)放置一个RSS图标。点击这个图标通常会带你到RSS订阅链接页面。...比如我的博客的RSS地址在最下方: 介绍一个可以发现当前网页rss链接的浏览器插件,RSSHub Radar[1]: rss-radar 我这里介绍一些我常用的RSS源: ScienceDirect的论文...,访问你感兴趣的ScienceDirect期刊网站,使用刚刚提到的插件可以获取到rss链接。...: https://blog.renhai-lab.tech/ [11] 我的GITHUB: https://github.com/renhai-lab [12] 我的GITEE: https://gitee.com

    1.2K10

    【译】Activity分割动画如何使用我的动画##

    我的思路很简单: Activity A保存为bitmap 把bitmap分割成两个子bitmap 子bitmap传递至Activity B 在Activity B的布局之上显示两个子bitmap 使用动画向外移出两个子...我遇到了一些困难,但最终我找到了所有问题的解决办法。接下来,就让我们一步步搞定它。...如果你依然选择使用,请小心,并且不要过度使用。...我使用硬件加速(了解更多有关硬件加速动画,请阅读我最新发布的blog)并且在动画结束或者取消后,做了一些清理操作(如,移除硬件图层,把Imageview从Window窗口移除等等) 如何使用我的动画##...我曾反复思考,在尽量不限制开发者的情况下,如何最简单便捷的使用它。

    1.4K20

    如何使用RSS订阅我的博客文章更新

    用户使用RSS阅读器订阅:用户可以通过RSS阅读器软件(如Feedly、Inoreader等)输入这个RSS链接,从而订阅这个网站的更新。...二、RSS订阅源的获取 使用官方或者个人搭建的RSS服务,许多支持RSS订阅的网站会在显眼的位置(如网页底部、侧边栏或头部)放置一个RSS图标。点击这个图标通常会带你到RSS订阅链接页面。...比如我的博客的RSS地址在最下方: 介绍一个可以发现当前网页rss链接的浏览器插件,RSSHub Radar[1]: rss-radar 我这里介绍一些我常用的RSS源: ScienceDirect的论文...,访问你感兴趣的ScienceDirect期刊网站,使用刚刚提到的插件可以获取到rss链接。...: https://blog.renhai-lab.tech/ [11] 我的GITHUB: https://github.com/renhai-lab [12] 我的GITEE: https://gitee.com

    59610

    (修订)双非渣本的我是如何进入京东(万字面经)

    文章来源于公众号的一位粉丝,作者:fanyank,他的简书https://www.jianshu.com/p/72e803674228,任何转载者务必保留原出处 自我介绍 楼楼双非渣本,实习的机会没有好好珍惜...,一心想着考研,后来因为种种原因在暑假的时候又放弃考研,此时已经接近9月,大部分互联网公司的提前批秋招已经结束,对我这个笔试渣渣秋招直接进入了地狱模式。...客户端的某个线程发送完消息之后如何进行等待?...更新为指向Local Record的指针,如果修改成功,则获取锁成功。...ID 回滚指针:当提交时发现数据完整性被破坏,利用回滚指针指向的undo log进行回滚数据操作 DB_ROW_ID:当用户没有指定聚簇索引的主键或唯一的索引时,InnoDB会自动生成聚簇索引,并使用DB_ROW_ID

    1.3K50

    我是如何使用Spring Retry减少1000 行代码

    问题介绍 在我的日常工作中,我主要负责开发一个庞大的金融应用程序。当客户发送请求时,我们使用他们的用户 ID 从第三方服务获取他们的帐户信息,保存交易并更新缓存中的详细信息。...作为本文的一部分,我们将了解如何使用 Spring Retry 重写现有代码,以及它如何帮助我将代码库减少 1000 行。在展示新代码时,我将解释每个代码的注解和用例。..."classpath:retryConfig.properties") public class ApplicationConfig { } 以下图片是一个先获取 MySql 连接,再查数据的例子,我再代码中使用了该外部化配置属性...: 消除错误时的重复操作,使用 RetryListenerSupport 重试 在前面的先获取 MySql 连接,再查数据的例子中,我想获取以下事件的指标: 再 Spring Retry 中,我可以使用...当所有重试都用尽时调用该方法 open — 重试开始时调用该方法 连接 MySql 数据库时,发出指标 连接 MySql 数据库失败时,发出指标 当用尽所有重试次数时,发出指标 总结 在本文中,我们了解了如何使用

    20910
    领券