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

在这里插入图片描述

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;
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-20 12:54:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-20 12:54:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-20 12:54:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-20 12:54:02       18 阅读

热门阅读

  1. C++:通过ofstream写入二进制文件内容

    2024-01-20 12:54:02       36 阅读
  2. uniapp技术积累

    2024-01-20 12:54:02       24 阅读
  3. MySQL经典面试题

    2024-01-20 12:54:02       29 阅读
  4. kafka hang 问题记录

    2024-01-20 12:54:02       27 阅读
  5. C#基本语法

    2024-01-20 12:54:02       29 阅读
  6. HTTP与HTTPS:网络通信的安全卫士

    2024-01-20 12:54:02       27 阅读
  7. 父组件调用子组件的函数,获取子组件的变量

    2024-01-20 12:54:02       35 阅读