双指针
seez
njfu
展开
-
牛客寒假训练营 3 I 智乃的密码(二分+前缀和,尺取)
可以发现,是一个典型的尺取(滑动窗口)的题目对于尺取的题目,一般都具有双单调性,以该题为例左指针向右移动,单调递减 右指针向右移动,单调递增对于这种具有双单调性的问题,直接用尺取就可以了需要特别区分的是以下情况越界,不能超过n 必须要在[L,R]范围内 每次跳出内循环都是在第一个满足条件点的后面,需要考虑在n时是否有解由于要求满足条件的区间数,那么在第一个满足条件点~距离R点,这一段区间都是满足条件的,直接加上就可以了避免多余运算问题1,越界:i+R不能越界,所以min..原创 2022-02-02 22:17:03 · 420 阅读 · 0 评论 -
1241. 外卖店优先级(模拟,双指针)
相隔,ac相隔一个b题目条件:两个订单 相隔一个时间及以上,外卖减去的优先级=相隔时间,相隔为0,不会减小 优先级<=3 清除出优先缓存 优先级>5 进入优先缓存 外卖优先级不会小于0由于订单相隔为0优先级应该是不变的,应该要(ts-last[id] +1)由于t时刻没有订单,所有要注意此时不能+1,t时刻减去优先级与处理订单时的操作不一样#include <iostream>#include <algorithm>#d...原创 2022-01-24 18:54:40 · 369 阅读 · 0 评论 -
1238. 日志统计
1.暴力做法#include <iostream>#include <algorithm>#include <cstring>//暴力做法,会超时using namespace std;#define x first#define y secondconst int N = 100005;bool id[N]; //表示一个帖子是否是热帖typedef pair<int, int> PII;PII ts[N]; ...原创 2021-11-29 20:46:08 · 606 阅读 · 0 评论 -
2816. 判断子序列(双指针,判断子序列)
#include <iostream>#include <algorithm>using namespace std;const int N=1e5+10;int a[N];int b[N];int main(){ int n,m; cin>>n>>m; for(int i=0;i<n;i++) cin>>a[i]; for(int j=0;j<m;j++)...原创 2022-01-24 11:31:45 · 104 阅读 · 0 评论 -
800. 数组元素的目标和(双指针,利用有序性)
双指针问题,先想想暴力怎么做for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(a[i]+b[j]==x) cout<<i<<' '<<j;暴力出来了,但是时间复杂度太高了,需要优化注意到a,b数组是具有单调性的1.a,b都单调递增i=0时,枚举到6,不满足条件,跳出 a[i]=1,b[j]=6i=1时,j不变仍是6,..原创 2022-01-24 11:26:23 · 68 阅读 · 0 评论 -
524. 通过删除字母匹配到字典里最长单词(双指针,子序列匹配)
双指针的子序列匹配问题,老样子,对于双指针问题,应该先写出暴力怎么做class Solution {public: string findLongestWord(string s, vector<string>& dictionary) { sort(dictionary.begin(),dictionary.end(),[](const auto &a,const auto &b) { if...原创 2022-01-24 10:39:17 · 192 阅读 · 0 评论 -
799. 最长连续不重复子序列(滑动窗口,双指针)
维护一个窗口,然后每次枚举时,都进行进出窗口的操作就可以了#include <iostream>#include <algorithm>using namespace std;const int N=1e5+10;int a[N];bool st[N];int res;int main(){ int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; ...原创 2022-01-23 23:07:40 · 708 阅读 · 0 评论 -
leetcode 713. 乘积小于K的子数组(双指针,滑动窗口)
双指针算法,首先想想暴力怎么做 for(int i=0;i<nums.size();i++) { long long sum=1; for(int j=i;j<nums.size();j++) { sum*=nums[j]; if(sum<k) res++; if(sum>=k) break; } } 双指针算法维护区间信息,通..原创 2022-01-23 22:54:42 · 207 阅读 · 0 评论