![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
双指针
文章平均质量分 60
oj
Ypuyu
Ypuyu
展开
-
[M双指针] lc611. 有效三角形的个数(二分+双指针+线性扫描+算法优化)
文章目录1. 题目来源2. 题目解析1. 题目来源链接:611. 有效三角形的个数2. 题目解析两种做法。体会二分和双指针的联系与区别。方法一:排序+二分先排序,然后枚举最小边 a,次小边 b,最长边要满足 a+b>c,故要找到小于 a+b 的最大的一个,二分找就行了。二分时需要注意下边界问题,每次从 [b, n-1] 开始二分是正确的,找不到的话将停留在 b 下标处,算答案的时候不会出错。否则,遇见 [0, 0, 0] 这样的数据,从 l=0, r=n-1 开始二分的话,会出错。原创 2021-08-04 07:41:54 · 150 阅读 · 0 评论 -
[双指针] aw3624. 三值字符串(双指针+好题)
文章目录1. 题目来源2. 题目解析1. 题目来源链接:3624. 三值字符串2. 题目解析双指针入门题,思维难度不高。双指针与二分都是寻求一种单调性,二分是数值随着下标单调。双指针是一个指针随着另一个指针单调。我们要求一个区间,显然得枚举区间起点、终点。在此枚举终点,暴力方法来讲是枚举前面所有的起点,将会是 O(n2)O(n^2)O(n2) 的时间复杂度。**双指针定义:i 区间终点,j 与 i 最近且无冗余元素的区间起点。能发现 j 指针是单调不减的,作为起点 j,当 cnt[s[j]]原创 2021-06-03 23:30:22 · 89 阅读 · 0 评论 -
[双指针] aw3333. K-优字符串(双指针+水题)
文章目录1. 题目来源2. 题目解析1. 题目来源链接:3333. K-优字符串2. 题目解析双指针水题。可发现首尾对应位置均独立,且得分可以任意变换。故仅需统计初始得分 sum,最小操作数,就是 abs(k-sum)。时间复杂度:O(n)O(n)O(n)空间复杂度:O(1)O(1)O(1)#include <iostream>#include <cstring>#include <algorithm>using namespace std;原创 2021-05-22 10:46:37 · 379 阅读 · 0 评论 -
[哈希表] lg-P1102. A-B 数对(哈希表+双指针+模板题)
文章目录1. 题目来源2. 题目解析1. 题目来源链接:P1102 A-B 数对2. 题目解析水题,题目不难,但是答案记得开 long long...............,要不一直 WA 一个点。这种求个数、求方案、且限制条件不够强的题目,一定要考虑最终的方案数是否很大。题解区发现一位大佬使用双指针来做,也很不错,贴一下大佬的思路~我在考虑能不能直接采用 lower_bound()、upper_bound() 代替这两个 while()…但貌似必然没有双指针的效果好,常数可能很大…甚至是原创 2021-05-14 14:27:51 · 156 阅读 · 0 评论 -
[双指针] aw3493. 最大的和(双指针+前缀和+滑动窗口+贝壳找房2021)
文章目录1. 题目来源2. 题目解析1. 题目来源链接:3493. 最大的和2. 题目解析每个数两种状态,可选、不可选。若想将可选状态的和最大,那就得让不可选的和最大,有区间长度限制,就采用滑动窗口维护即可。两种方法,前缀和或者双指针。前缀和维护不可选状态的数的前缀和,方便进行滑动窗口的区间查找。双指针就直接维护滑动窗口找到窗口内的不可选状态数的最大和即可。本质是一样的,都是找到长度限制下不可选状态的最大和。注意数据范围 1e5*1e5 会爆 int,记得开 long long。时间复杂度:原创 2021-05-12 09:24:15 · 115 阅读 · 0 评论 -
[双指针] 数组元素的目标和(模板题)
文章目录1. 双指针1. 双指针800. 数组元素的目标和lc,第一题,两数之和 不过这个是无序数组。思路:双指针,i 指向 a 数组的起始位置j 指向 b 数组的末尾位置如果 a[i]+b[j]>t 说明大了,则 j--否则,小了,则 i++代码:#include <iostream>using namespace std;const int N = 1e5+5;int n, m, x;int a[N], b[N];int main() {原创 2020-11-15 21:48:01 · 78 阅读 · 1 评论 -
[双指针] 最长连续不重复子序列(模板题)
文章目录1. 双指针1. 双指针799. 最长连续不重复子序列思路:双指针 i, j 维护 [j, i] 以 a[i] 结尾的最长连续不重复子序列,长度就是 i - j + 1i 遍历过的,就哈希表记录,++i当出现重复元素时,一定是 a[i] 与 a[j~i-1] 中的某一个元素重复。故就 ++j 直至 [j, i] 这个区间不出现这个重复元素由于 [j, i - 1] 已经是前一步的最优解,此时 j 只可能右移以剔除重复元素 a[i],不可能左移增加元素,因此,j 具有单调性,所以就很原创 2020-11-15 21:34:59 · 124 阅读 · 1 评论 -
[双指针] 判断子序列(模板题)
文章目录0. 前言1. 双指针0. 前言以前双指针的专栏一直没放啥题目进去,都是作为中间算法的一步,感觉也不经典。这个问题是蛮经典的双指针问题。1. 双指针2816. 判断子序列思路:双指针顺序找就行了,双指针算法能够保证有答案一定会被找出来注意,在此顺序找的是 b 数组第一个与 a 数组当前位置相同的点代码:#include <iostream>using namespace std;const int N = 1e5+5;int n, m;int a[N原创 2020-11-15 21:15:40 · 90 阅读 · 0 评论