首页 > 其他分享 >《力扣面试150题》题单拓展——双指针

《力扣面试150题》题单拓展——双指针

时间:2023-12-01 14:12:15浏览次数:31  
标签:150 target 三数 力扣 搜索 空间 题单 指针

《力扣面试150题》题单拓展——双指针

1.基础知识

为什么双指针会正确?不会漏掉搜索空间

  1. 数组nums递增排序,假设共8个元素
  2. 假设由于搜索空间i < j的限制,只搜索右上角白色倒三角空间,一开始,我们检查右上方单元格(0,7),即计算A[0] + A[7],与 target 进行比较。如果不相等的话,则要么大于 target,要么小于 target

检查单元格 0, 7

  1. 假设此时 A[0] + A[7] 小于 target。这时候,我们应该去找和更大的两个数。由于 A[7] 已经是最大的数了,其他的数跟A[0]相加,和只会更小。也就是说 A[0] + A[6] 、A[0] + A[5]、……、A[0] + A[1] 也都小于 target,这些都是不合要求的解,可以一次排除。这相当于i=0 的情况全部被排除。对应用双指针解法的代码,就是 i++,对应于搜索空间,就是削减了一行的搜索空间,如下图所示。

削减空间

  1. 假设此时 A[1] + A[7]大于 target。这时候,我们应该去找 和更小的两个数。由于 A[1] 已经是当前搜索空间最小的数了,其他的数跟 A[7] 相加的话,和只会更大。也就是说 A[1] + A[7] 、A[2] + A[7]、……、A[6] + A[7] 也都大于 target,这些都是不合要求的解,可以一次排除。这相当于 j=7 的情况全部被排除。对应用双指针解法的代码,就是 j--,对应于搜索空间,就是削减了一列的搜索空间,如下图所示

j缩减空间

2.缩减空间

240.搜索二维矩阵II

同样右上角开始,一列 / 一行的缩减空间


167.两数之和II-输入有序数组

基础知识图示例题


11.盛最多水的容器

之前一直还蒙,缩减空间后,豁然开朗


74.搜索二维矩阵

可以缩减空间,也可以去二分查找,先找到目标行就可以

3.双指针延伸

15.三数之和

i l r 三个指针的去重思想很棒,值得反复打磨


611.有效三角形的个数

固定哪个指针真的很有趣,一旦是最左边的,肯定做不出来


18.四数之和

固定前两个指针,转为了“三数之和”,可以借鉴三数之和的去重思路,注意j-i>1就是把ji前面的隔出来,才能去重,不然本轮j的去重会和上轮的i重叠

4.常规扫描

2824.统计和小于目标的下标对数目 难度分:1166

常规双指针扫描了,收集个数


16.最接近的三数之和

两个条件分别控制l r指针,常规


42.接雨水

找到前后max的min,就能计算当前可以存下的水,可以借助辅助的数组空间和纯正的双指针

标签:150,target,三数,力扣,搜索,空间,题单,指针
From: https://www.cnblogs.com/cyl018/p/17869584.html

相关文章

  • 《力扣面试150题》题单拓展——二分法
    《力扣面试150题》题单拓展——二分法困难题:找第K大/小1.基础知识首先可以确定答案的上下界单调性分析:如果当前答案为m时,可以满足,一定有一侧是一定满足的,另一侧不一定,需要去探索boolis_ok(){}intl,r;intans;while(l<=r){intm=l+((r-l)>>1);......
  • 《力扣面试150题》题单拓展——堆
    《力扣面试150题》题单拓展——堆一、堆困难题:找K小,先考虑二分法基础知识//优先队列:priority_queue<int,vector<int>,greater<int>>q;//小根堆priority_queue<int,vector<int>,less<int>>q;//小根堆优先队列自定义比较函数//1,小根堆boolcmp(vector<i......
  • 力扣907. 子数组的最小值之和(单调栈)
    给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。由于答案可能很大,因此 返回答案模 10^9+7 。 示例1:输入:arr=[3,1,2,4]输出:17解释:子数组为[3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为3,1,2,4,1,1,2,1,1,1,和......
  • 从 15000 家参赛企业脱颖而出,涛思数据荣获中国创新创业大赛“优秀企业”
    近年来,以大数据、人工智能、物联网、新型显示、高性能集成电路、5G通信、云计算等为代表的创新技术加速突破应用,在传统行业的数字化转型进程中发挥着重要作用,催生出一系列新产品、新技术、新业态,形成了强劲的数字经济发展新动能。在此背景下,2023第十二届中国创新创业大赛新一代信......
  • ACM中的组合计数题单好题汇总(持续更新中)
    前言:这里会分享一些精妙的组合计数题,此类题往往需要选择合适的计数集合的划分方式,有些计数角度的精妙,个人感觉没有做过相对的题目,或者是计数感足够犀利,实在是很难想到正确的角度,所以这里会汇总一些有趣的计数题,希望可以帮助到一部分人ARC168C-SwapCharacte......
  • [Codeforces] CF1506C Epic Transformation
    EpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(*a_i\neqa_j*\) 然后删除 \(*a_i,a_j*\) 两个数。求序列 a 经过若干次操作后最少......
  • Oracle DBA遇到的top150个问题
    作为OracleDBA(数据库管理员),以下是更多常见的Oracle数据库管理中可能遇到的150个问题案例:数据库备份和恢复失败数据库性能下降数据库连接问题长时间运行的查询和死锁数据库服务器崩溃或宕机数据库空间不足数据库日志文件过大数据库表空间损坏数据库安全漏洞数据库版本升......
  • 力扣刷题随笔
    力扣刷题随笔回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false链表中节点数目在范围[1,105]内0<=Node.val<=9本题的思路就是利用双指针的方法来比......
  • CF1506C Epic Transformation
    CF1506CEpicTransformationEpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(a_i\neqa_j\) 然后删除 \(*a_i,a_j*\) 两个数。求序......
  • CSC3150 指令集
    一个简单且类似Unix的教学操作系统,作为指导您实现间接块以支持大文件管理。在现有实现时,单个间接块可以处理对大文件无效的有限块经营在这个分配中,您将把xv6文件的最大大小增加实现用于进一步扩展的双重间接块。我们建议您在编写代码之前先阅读第8章:文件系统。准备工作mkfs程序......