F. Longest Strike[双指针详解]

news2024/11/8 23:57:01

Longest Strike

题面翻译

给你一个长度为 n n n 的序列 a a a 和一个整数 k k k,你要求一个区间 [ l , r ] [l,r] [l,r] 满足:

  • 对于任何整数 x ∈ [ l , r ] x∈[l,r] x[l,r] x x x a a a 中的出现次数不少于 k k k 次。
  • 最大化 r − l r-l rl

无解输出 -1

例如, a = [ 11 , 11 , 12 , 13 , 13 , 14 , 14 ] , k = 2 a=[11,11,12,13,13,14,14],k=2 a=[11,11,12,13,13,14,14],k=2 时:

  • l = 12 , r = 14 l=12,r=14 l=12,r=14 不满足条件,因为 12 12 12 只出现了 1 1 1 次。
  • l = 13 , r = 14 l=13,r=14 l=13,r=14 满足条件,因为 13 13 13 出现了 2 2 2 次, 14 14 14 出现了 2 2 2 次。
  • l = 11 , r = 11 l=11,r=11 l=11,r=11 满足条件,因为 11 11 11 出现了 2 2 2 次。

满足条件且 r − l r-l rl 最大的区间是 l = 13 , r = 14 l=13,r=14 l=13,r=14
在这里插入图片描述在这里插入图片描述

样例 #1

样例输入 #1

4
7 2
11 11 12 13 13 14 14
5 1
6 3 5 2 1
6 4
4 3 4 3 3 4
14 2
1 1 2 2 2 3 3 3 3 4 4 4 4 4

样例输出 #1

13 14
1 3
-1
1 4

思路:
注意题目里面的x是任何属于l与r区间的数,所以我们取得这个区间一定是满足单调递增且公差是1的一组序列,然后把这些数放入一个全新的a序列里面,用双指针判断即可
判断一个序列是否要结束
1.次数不够了要终止
2.出现的断要终止
3.到了结尾要终止

即:if (a[i] - a[i - 1] != 1 || mp[a[i]] < m||i==k+1)
三种情况出现一个就要结束

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
int t, n, m;
int w[200005];
int a[200005];
int main()
{
    cin >> t;
    while (t--)
    {
        int sst=0, ed=0;//上限与下限
        bool vis = 0;//判断能不能构成
        int ans = 0;
        map<int, int>mp;//判断每一个数出现的个数
        map<int, int>st;
        cin >> n >> m;
        for (int i = 1; i <= n; i++) {
            cin >> w[i], mp[w[i]]++;//个数++
            if (mp[w[i]] >= m)
                vis = 1;//这样肯定就是合法的,
                //即不用输出-1
        }
        sort(w + 1, w + 1 + n);//排个序方便判断
        int k = 1;
        for (int i = 1; i <= n; i++)
        {
            if (!st[w[i]])
                a[k++] = w[i], st[w[i]] = 1;
        }      
        k--;//k多加了一次要剪掉
        int r = 1;
        int l = 1;
        a[0] = a[1] - 1;
        while (l <= k && mp[a[l]] < m) l++;//确定l下限的位置
        r = l;
        for (int i = l; i <= k+1; i++){
            if (a[i] - a[i - 1] != 1 || mp[a[i]] < m||i==k+1){
                r = i - 1;
                if (ans < r - l + 1) {
                //长度变大,记得更新边界
                    sst = l;
                    ed = r;
                    ans = r - l + 1;
                }
                l = i;
                while (l <= k && mp[a[l]] < m) l++;//确定l下限的位置
                i = l;
            }
        }
        if (!vis) cout << -1 << endl;//无答案
        else 
        cout << a[sst] << " " << a[ed] << endl;
    }

    return 0;
}

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

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

相关文章

【Postman接口测试】第四节.Postman接口测试项目实战(上)

文章目录 前言一、项目介绍 1.1 项目界面功能介绍 1.2 项目测试接口介绍 1.3 项目测试接口流程二、HTTP协议三、接口测试中接口规范四、项目合同新增业务介绍 4.1 登录接口调试 4.1 登录接口自动关联 4.1 添加课程接口调试 4.1 上传合同…

排序(前篇)

1.排序的概念及其运用 2.插入排序的概念及实现 3.希尔排序的概念及实现 4.选择排序概念及实现 总代码&#xff08;对比各个排序在大量的数据情况排序所化的时间&#xff09;&#xff1a; 1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使…

linux中逻辑卷管理与扩展

逻辑卷管理与扩展 逻辑卷 作用&#xff1a; 1.整合分散的空间2.空间支持扩大 逻辑卷制作过程&#xff1a;将众多的物理卷&#xff08;PV&#xff09;组建成卷组&#xff08;VG&#xff09;&#xff0c;再从卷组中划分出逻辑卷&#xff08;LV&#xff09; 逻辑卷的逻辑思路 …

前端项目开发,3个HTTP请求工具

这一小节&#xff0c;我们介绍一下前端项目开发中&#xff0c;HTTP请求会用到的3个工具&#xff0c;分别是fetch、axios和js-tool-big-box中的jsonp请求。那么他们都有哪些小区别呢&#xff1f;我们一起来看一下。 目录 1 fetch 2 axios 3 js-tool-big-box 的 jsonp 请求 …

一个月速刷leetcodeHOT100 day13 二叉树结构 以及相关简单题

树是一种分层数据的抽象模型 二叉树 二叉树中的节点最多只能有两个子节点&#xff0c;一个是左侧子节点&#xff0c;另一个是右侧子节点 二叉搜索树 二叉搜索树&#xff08;BST&#xff09;是二叉树的一种&#xff0c;但是只允许你在左侧节点存储&#xff08;比父节点&…

扎气球最高分-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第74讲。 扎气球最高分&…

IntelliJ IDEA内置自带Maven的使用注意事项

一、内置自带Maven的位置 IDEA中是有自带Maven的,虽然可能不够个性化,不太好用,但是如果知道怎么设置,还是能自定义一点的。它作为IDEA的自带插件,位置在IDEA所在目录的“\plugins\plugins\maven\lib\maven3\”文件夹中。 二、本地仓库位置 因为Maven主要功能就是统一下…

MoE模型大火,源2.0-M32诠释“三个臭皮匠,顶个诸葛亮”!

文 | 智能相对论 作者 | 陈泊丞 近半年来&#xff0c;MoE混合专家大模型彻底是火了。 在海外&#xff0c;OpenAI的GPT-4、谷歌的Gemini、Mistral AI的Mistral、xAI的Grok-1等主流大模型都采用了MoE架构。而在国内&#xff0c;浪潮信息也刚刚发布了基于MoE架构的“源2.0-M3…

无人机操作界面来了,起点就很高呀。

无人机操作界面设计需要考虑以下几个方面&#xff1a; 易用性&#xff1a;无人机操作界面应该简单直观&#xff0c;易于操作和理解。操作按钮和控键应该布局合理&#xff0c;易于触摸或点击。重要的操作功能应该易于找到和使用&#xff0c;避免用户迷失或困惑。实时反馈&#…

【Uniapp微信小程序】自定义水印相机、微信小程序地点打卡相机

效果图 template 下方的image图片自行寻找替换! <template><view><camerav-if="!tempImagePath && cameraHeight !== 0":resolution="high":frame-size="large":device-position="device":flash="flas…

RAID配置实战

概念 raid磁盘阵列&#xff1a;可以用不同的硬盘分区&#xff0c;组成一个逻辑上的硬盘。具有高可用 raid级别&#xff1a; raid0 &#xff1a;条带化存储&#xff1a;数据分散在多个物理硬盘上的存储方式。利用多个磁盘并行读取和写入。存储性能和读写性能是最好的。没有冗…

朗读亭主要作用有哪些?

朗读亭的主要作用有以下几个方面&#xff1a; 1. 提供朗读服务&#xff1a;朗读亭是一个专门的场所&#xff0c;提供给人们朗读的环境和场地。人们可以在朗读亭中选择自己喜欢的书籍或文章&#xff0c;并通过朗读将其表达出来。这样可以帮助人们提高朗读能力&#xff0c;增强自…

【C语言训练题库】杨辉三角(下三角型和金字塔型)

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 题目&#xff1a;打印杨辉三角 1. 下三角型 1.1 图例: 1.2. 解析: 1.3. 代码: 1.4. 运行&#xff1a; 2. 金字塔型 2.1 图例 2.2. 解析 2.2.1. 打印金…

[猫头虎分享21天微信小程序基础入门教程]第21天:小程序的社交分享与消息推送

[猫头虎分享21天微信小程序基础入门教程]第21天&#xff1a;小程序的社交分享与消息推送 第21天&#xff1a;小程序的社交分享与消息推送 &#x1f4f2; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&#xff0c;重…

买入看跌期权怎么理解?

今天带你了解买入看跌期权怎么理解&#xff1f;看跌期权买入者往往预期市场价格将下跌。 买入看跌期权怎么理解&#xff1f; 买入看跌期权是指购买者支付权利金&#xff0c;获得以特定价格向期权出售者卖出一定数量的某种特定商品的权利。看跌期权买入者往往预期市场价格将下跌…

基于python实现生命游戏

文章目录 一、生命游戏是什么二、生命游戏规则解释1.相邻细胞2.细胞状态 三、代码实现1.邻居细胞2.更新状态 四、整体代码 一、生命游戏是什么 生命游戏&#xff08;Game of Life&#xff09;是由英国数学家约翰何顿康威在1970年发明的一种细胞自动机&#xff08;Cellular Aut…

备份服务器的安全风险以及如何通过TDE透明加密提升安全性

备份服务器的潜在安全风险主要包括以下几个方面&#xff1a; 1. 数据泄露风险&#xff1a; 备份数据可能包含敏感信息&#xff0c;如用户个人信息、商业机密等。如果备份数据未经适当保护&#xff0c;例如存储在不安全的位置或未加密&#xff0c;黑客或未授权的人员可能会获取…

家政预约小程序08服务详情

目录 1 创建页面2 创建URL参数3 配置数据详情组件4 从分类页跳转到详情页5 搭建详情页总结 现在我们的小程序已经在首页和分类页展示了服务的列表信息&#xff0c;当用户点击具体的内容的时候需要打开详情页&#xff0c;本篇介绍一下详情页的开发。 1 创建页面 打开应用编辑器…

【第7章】SpringBoot整合Mybatis-Plus

文章目录 前言一、引入库二、案例1.UserMapper2.UserController3. 结果 三、配置总结 前言 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 上一篇内容已经整合过Mybatis&#xff0c;这里在…

拼接字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用“”运算符可完成对多个字符串的拼接&#xff0c;“”运算符可以连接多个字符串并产生一个字符串对象。 例如&#xff0c;定义两个字符串&#…