蓝桥杯省赛无忧 第二章 基础算法 课件30 双指针

发布时间:2024年01月20日

在这里插入图片描述

01 双指针简介

在这里插入图片描述

02 对撞指针

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
int main() {
    
    string str;
    cin >> str;
    
    for (int i = 0, j = str.length() - 1; i < str.length() / 2; i ++, j --) {
        
        if (str[i] != str[j]) {
            cout << "N";
            return 0;
        }
        
    }
    cout << "Y";
    return 0;
}

03 快慢指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
int n,k,a[100005];
int main()
{cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
int sum=0,ans=1e9;
for(int i=1,j=0;i<=n;i++)
{ while(sum<k&&j<=n)
  j++,sum+=a[j];
  if(sum>=k)
  ans=min(ans,j-i+1);
  sum-=a[i];
}
if(ans==1e9)
cout<<0;
else
cout<<ans;
}

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
const int N=2000;
int a[N];
int main()
{
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  int n,m,k;
  cin>>n>>m>>k;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
  }
  int ans=0;
  for(int i=1,j=0,cnt=0;i<=n;i++)
  {
    while(i>j||(j+1<=n&&cnt<k))
    {
      cnt+=(a[++j]>=m);
    }
    if(cnt>=k)
    ans+=n-j+1;
  cnt-=(a[i]>=m);
  }
  cout<<ans<<endl;
  return 0;
}
文章来源:https://blog.csdn.net/weixin_74774974/article/details/135712194
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。