前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法基础学习笔记——⑥双指针

算法基础学习笔记——⑥双指针

作者头像
命运之光
发布2024-03-20 10:52:14
920
发布2024-03-20 10:52:14
举报
文章被收录于专栏:我在本科期间写的文章

博主:命运之光专栏:算法基础学习

前言:算法学习笔记记录日常分享,需要的看哈O(∩_∩)O,感谢大家的支持!

✨双指针

双指针算法的核心思想:

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

O(n^2)

将上面的朴素算法优化到O(n)

🍓双指针模板:

代码语言:javascript
复制
for (int i = 0, j = 0; i < n; i ++ )
{
    while (j < i && check(i, j)) j ++ ;
    // 具体问题的逻辑
}

常见问题分类:

(1) 对于一个序列,用两个指针维护一段区间

(2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作

🍓例题:统计日志
代码语言:javascript
复制
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100000+5;
typedef struct Log{
int ts,id;
}Log; 
Log logs[N];
//(tk-D,tk]
int n,d,k; 
int cnt[N];//cnt[i]始终存储的是连续d分钟内id=i的帖子的点赞量 
bool rt[N]; 
bool cmp(Log qian,Log hou){
    if(qian.ts<hou.ts)
    	return true;
    return false;
}
int main(){
    scanf("%d%d%d",&n,&d,&k);
    int m=0;
    for(int i=1;i<=n;i++){
        scanf("%d%d",&logs[i].ts,&logs[i].id);
        m=max(m,logs[i].id);
    }
    sort(logs+1,logs+n+1,cmp); 
    for(int i=1,j=1;i<=n;i++){//i和j始终维护长度小于d的区间 
        cnt[logs[i].id]++; 
        while(logs[i].ts-logs[j].ts>=d){
            cnt[logs[j].id]--;
            j++;
    	}
        if(cnt[logs[i].id]>=k){
        	rt[logs[i].id]=true;
        }
    }
    for(int i=0;i<=m;i++){
        if(rt[i]==true)
        	printf("%d\n",i);
    }
}
🍓例题:统计子矩阵
代码语言:javascript
复制
#include <iostream>
using namespace std;
const int N=510;
int n,m,k; 
int s[N][N];
int main(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>s[i][j];
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+s[i][j];
        }
    }
    long long ans=0;
    for(int l=1;l<=m;l++){
        for(int r=l;r<=m;r++){
            for(int d=1,u=1;d<=n;d++){
                while(u<=d&&(s[d][r]-s[d][l-1]-s[u-1][r]+s[u-1][l-1]>k))
                	u++;
                if(u<=d)
                	ans+=d-u+1;
            }
        }
    }
    cout<<ans<<endl;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ✨双指针
    • 🍓双指针模板:
      • 🍓例题:统计日志
      • 🍓例题:统计子矩阵
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档