蓝桥杯练习题——双指针

news2024/11/18 3:49:09

1.牛的学术圈 I

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

思路

1.从大到小排序,把数组分成三段,[1, j] (j, j2] (j2, n],j 以 i 为界限,j2 以 i - 1 为界限
2.第一部分引用数已经够了,第三部分引用数差太多,判断第一部分 + min(L, 第二部分)是否有 i 篇

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n, l;

int main(){
    scanf("%d%d", &n, &l);
    for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    sort(a + 1, a + n + 1, greater<int>());
    int res = 0;
    for(int i = 1, j = n, j2 = n; i <= n; i++){
        // 维护大于等于 i 和小于 i 的界限
        while(j && i > a[j]) j--;
        // 维护大于等于 i - 1 和小于 i - 1 的界限
        while(j2 && i - 1 > a[j2]) j2--;
        // 判断第一部分 + min(L, 第二部分)是否有 i 篇
        if(j + min(l, j2 - j) >= i){
            res = i;
        }
    }
    printf("%d", res);
    return 0;
}

2.最长连续不重复子序列

在这里插入图片描述

思路

用 i 和 j 维护一组连续不重复子序列,用一个数组存储这个区间每个元素出现了多少次,如果出现次数大于 1,那就有重复元素,i 右移直到没有重复元素

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];
int n;

int main(){
    scanf("%d", &n);
    for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    int res = 0;
    for(int i = 0, j = 0; j < n; j++){
        b[a[j]]++;
        while(b[a[j]] > 1){
            b[a[i]]--;
            i++;
        }
        res = max(res, j - i + 1);
    }
    printf("%d", res);
    return 0;
}

3.数组元素的目标和

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

思路

i 指针正序遍历 a 数组,j 指针倒序遍历 b 数组,如果和大了 j 左移,和小了 i 右移

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int n, m, x;
int a[N], b[N];

int main(){
    scanf("%d%d%d", &n, &m, &x);
    for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    for(int i = 0; i < m; i++) scanf("%d", &b[i]);
    int l = 0, r = m - 1;
    while(1){
        if(a[l] + b[r] == x){
            printf("%d %d", l, r);
            break;
        }
        while(a[l] + b[r] < x) l++;
        while(a[l] + b[r] > x) r--;
    }
    return 0;
}

4.判断子序列

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

思路

i 指针枚举 a 数组,j 指针枚举 b 数组,j 指针一直右移,如果两个位置相等,i 指针右移

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];
int n, m;

int main(){
    scanf("%d%d", &n, &m);
    for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    for(int i = 0; i < m; i++) scanf("%d", &b[i]);
    int l = 0, r = 0;
    while(l < n && r < m){
        if(a[l] == b[r]) l++;
        r++;
    }
    printf("%s", (l == n ? "Yes" : "No"));
    return 0;
}

5.日志统计

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

思路

根据时间排序,可以独立处理编号或者并行处理编号
1.独立处理编号:用 cnt 数组存储每个编号得到的赞,如果时间大于等于 d 了,那么左指针右移,如果当前右指针的编号赞大于等于 k 了,那就是热帖
2.并行处理编号:每次判断长为 k 的区间是否是一个编号,如果是一个编号且时间小于 d,那么就是热帖,然后再移动到下个编号区间

// 独立处理编号
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
pair<int, int> a[N];
int b[N], cnt[N];
int n, d, k;

int main(){
    scanf("%d%d%d", &n, &d, &k);
    int ts, id;
    for(int i = 0; i < n; i++){
        scanf("%d%d", &ts, &id);
        a[i] = make_pair(ts, id);
    }
    sort(a, a + n);
    for(int i = 0, j = 0; j < n; j++){
        int it = a[j].second;
        cnt[it]++;
        while(a[j].first - a[i].first >= d){
            cnt[a[i].second]--;
            i++;
        }
        if(cnt[it] >= k) b[it] = 1;
    }
    for(int i = 0; i <= 100000; i++){
        if(b[i]) printf("%d\n", i);
    }
    return 0;
}

// 并行处理编号
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
pair<int, int> a[N];
int b[N], cnt[N];
int n, d, k;

int main(){
    scanf("%d%d%d", &n, &d, &k);
    int ts, id;
    for(int i = 0; i < n; i++){
        scanf("%d%d", &ts, &id);
        a[i] = make_pair(id, ts);
    }
    sort(a, a + n);
    int l = 0, r = k - 1;
    while(r < n){
    	// 是一个编号区间
        if(a[l].first == a[r].first){
            if(a[r].second - a[l].second < d){
                printf("%d\n", a[l].first);
                // 移动到下一个编号区间
                while(r < n && a[l].first == a[r].first) r++;
                l = r, r += k - 1;
            }else{
                l++, r++;
            }
        }else{ // 不是一个编号区间
            while(r < n && a[l].first == a[r].first) r++;
            l = r, r += k - 1;
        }
    }
    return 0;
}

6.统计子矩阵

在这里插入图片描述

思路

1.计算前缀和
2.枚举上下边界,双指针枚举左右边界,如果矩阵和大了,左指针就右移
3.注意 l <= r

#include<iostream>
using namespace std;
const int N = 510;
int a[N][N];
int n, m, k;

int main(){
    scanf("%d%d%d", &n, &m, &k);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            scanf("%d", &a[i][j]);
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
        }
    }
    // i, l   i, r
    // j, l   j, r
    long long cnt = 0;
    for(int i = 1; i <= n; i++){
        for(int j = i; j <= n; j++){
            for(int l = 1, r = 1; r <= m; r++){
                while(l <= r && a[j][r] - a[j][l - 1] - a[i - 1][r] + a[i - 1][l - 1] > k) l++;
                if(l <= r) cnt += r - l + 1;
            }
        }
    }
    printf("%lld", cnt);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1492453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Lattice FPGA 开发】IP核的调用

本文介绍Diamond开发软件进行IP核调用与对应官方文档查找方法。 文章目录 1. IP核的调用1.1 IPexpress调用IP核1.2 Clarity Designer调用IP核 2. IP核相关文档查找2.1 方法一2.2 方法二2.3 方法三 3 问题 1. IP核的调用 Diamond软件中&#xff0c;根据所选目标FPGA器件型号的…

持续更新 | 与您分享 Flutter 2024 年路线图

作者 / Michael Thomsen Flutter 是一个拥有繁荣社区的开源项目&#xff0c;我们致力于确保我们的计划公开透明&#xff0c;并将毫无隐瞒地分享从问题到设计规范的所有内容。我们了解到许多开发者对 Flutter 的功能路线图很感兴趣。我们往往会在一年中不断更改并调整这些计划&a…

【项目】Boost 搜索引擎

文章目录 1.背景2.宏观原理3.相关技术与开发环境4. 实现原理1.下载2.加载与解析文件2.1获取指定目录下的所有网页文件2.2. 获取网页文件中的关键信息2.3. 对读取文件进行保存 3.索引3.1正排与倒排3.2获取正排和倒排索引3.3建立索引3.3.1正排索引3.3.2倒排索引 4.搜索4.1 初始化…

ArmSoM Rockchip系列产品 通用教程 之 UART 使用

1. UART 简介​ Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准&#xff0c;完整模块支持以下功能&#xff1a; 支持5、6、7、8 bits数据位。支持1、1.5、2 bits停止位。支持奇校验和偶校验&#xff0c;不支持mark校验和space校验。支持接…

Kafka | SpringBoot集成Kafka

SpringBoot集成Kafka 一、前言二、项目1. pom2. application.properties4. 消息生产者-测试5. 消息消费者 三、启动测试四、有总结的不对的地方/或者问题 请指正, 我在努力中 一、前言 该文章中主要对SpringBoot 集成Kafka 主要是 application.properties 与 pom坐标就算集成完…

flutterui框架,android面试宝典铁道出版社

在很多程序员看来&#xff0c;数据结构&#xff0c;算法这一类的东西感觉没用&#xff0c;在实践中都不常用&#xff0c;所以都会很忽视这类内容&#xff0c;但是在很多公司看来&#xff0c;尤其是大公司看来数据结构和算法这种东西确实最有用&#xff0c;而且经常在笔试和面试…

Blender和3ds Max哪个会是行业未来?

Blender和3ds Max都是很强大的三维建模和渲染软件&#xff0c;各有各的好处。选择哪个软件更好&#xff0c;要看你的需求、预算、技术水平以及行业趋势等因素。 Blender最大的优点是免费且开源&#xff0c;这对预算有限的个人和小团队来说很有吸引力。它有很多建模工具和功能&…

如何快速分析OB集群日志,敏捷诊断工具obdiag分析能力实践——《OceanBase诊断系列》之四

1. 前言 obdiag是OceanBase的敏捷诊断工具。1.2版本中&#xff0c;obdiag支持快速收集诊断信息&#xff0c;但仅有收集能力是不够的&#xff0c;还需要有分析能力。因此在obdiag的1.3.0版本中&#xff0c;我们加入了OB集群的日志分析功能。用户可以一键进行集群的OB日志的分析…

第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

Docker发布镜像(DockerHub,阿里云)

目录 1、发布到DockerHub上 2、发布到阿里云镜像服务上 小结 1、发布到DockerHub上 1.地址https://hub.docker.com/注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交自己的镜像 [rootwq test]# docker login --helpUsage: docker login [OPTIONS] [SERVER]Log in…

c# 调用ip2region组件 根据ip地址进行定位归属地运营商

需求描述&#xff1a;当项目中需要将IP转换成对应的归属地以及运营商&#xff0c;那么通过ip2region组件即可完美实现。 p2region本身支持net4.5以上&#xff0c;还有个ip2region.net组件&#xff0c;它要求net6及以上。所以&#xff0c;根据自己项目的需求即可选择其中一种方…

HarmonyOS NEXT应用开发——Navigation开发 页面切换场景范例

简介 在应用开发时&#xff0c;我们常常遇到&#xff0c;需要在应用内多页面跳转场景时中使用Navigation导航组件做统一的页面跳转管理&#xff0c;它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。除此之外还拥有动态加载&#xff0c;navPathSta…

Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)(2)

安装k8有多种方式如&#xff1a; minikube kubeadm 二进制安装 命令行工具 我这里就使用kubeadm进行安装 环境 3台centos7 master ip &#xff1a;192.168.113.120 2G运存 2内核 node1 ip &#xff1a;192.168.113.121 2G运存 2内核 node2 ip &#xff1a;192.168.1…

linux kernel物理内存概述(五)

目录 概述 一、快速路径分配 1、get_page_from_freelist 2、rmqueue()函数 二、慢速路径分配 1、分配流程 三、direct_compact 概述 物理内存分配步骤 1、初始化,参数初始化 2、内存充足&#xff0c;快速分配 get_page_from_freelist 3、内存压力大&#xff0c;慢速…

从一个word里面复制表格到另一个word时,表格变形的问题

复制过来保留源格式&#xff0c;检查段落、页边距里面的格式都和原始word一致后&#xff0c;仍然表格变形。 这时点页边距-自定义页边距-文档网格 看字符数是不是一致的

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(下)

Limo Pro 小车建图导航 引言 前景提要&#xff1a;我们在上文介绍了使用LIMO cobot 实现一个能够执行复杂任务的复合机器人系统的应用场景的项目&#xff0c;从以下三个方面&#xff1a;概念设计、系统架构以及关键组件。 本文主要深入项目内核的主要部分&#xff0c;同样也主要…

【每日一题】1976. 到达目的地的方案数-2024.3.5

题目: 1976. 到达目的地的方案数 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。 给你一个整数 n 和二维整数数组 roads ,其中 roads[i] = […

[BUG]vscode插件live server无法自动打开浏览器

问题描述&#xff1a; 点了open with live server但是浏览器没有自动跳出来 http://127.0.0.1:5500/里面是有东西的 解决方法&#xff1a; 配置环境变量&#xff0c;在path中添加program files

MCU最小系统电路设计(以STM32F103C8T6为例)

目录 一、何为最小系统&#xff1f; 二、最小系统电路设计 1.电源 &#xff08;1&#xff09;各种名词解释 &#xff08;2&#xff09;为什么会有VDD_1 _2 _3区分&#xff1f; &#xff08;3&#xff09;Mirco USB &#xff08;4&#xff09;5v->3.3v滤波电路 &#…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用&#xff0c;可能添加脚本后要手动拖动&#xff0c;这样如果有大量的脚本拖动也是不小的工作量 实例 例如&#xff1a;我的脚本需要添加一个Bone的列表&#xff0c;一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…