一个在OJ的过程中遇到的不能理解的问题——E - Longest Strike
一个 理解 过程 不能 遇到 OJ Longest 问题
2023-09-11 14:22:52 时间
先说题目内容
因为有些紧急,我这里就不对上面的内容进行详细翻译了,大概意思就是找一个范围,使得这个范围里的数连续并重复出现k次,这里我可以先放一下我的code:
#include<stdio.h>
#include<iostream>
#include<map>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
int num,time;
cin>>num>>time;
int a[200000];
map<int,int> mp;
//首先,输入数据,把数据构建成map类型的结构
for(int j=0;j<num;j++){
cin>>a[j];
if(mp.find(a[j])==mp.end()){
mp.insert(pair<int,int>(a[j],1));
}
else{
mp[a[j]]++;
}
}
//遍历map,找到符合要求的输入数字
map<int, int>::iterator iter;
iter = mp.begin();
int mid[200000];
int biao=0;
while(iter != mp.end()) {
if(iter->second>=time){
mid[biao++]=iter->first;
}
iter++;
}
//对遍历结果进行分析
if(biao==0){
cout<<"-1"<<endl;
continue;
}
int r=0,l=0;
int ar=0,al=0;
//最后问题简化为了对一个数组,找其中最长的连续子串的问题
for(int j=0;j<biao-1;j++){
if(mid[j+1]-mid[j]==1){
r++;
}
else{
if(r-l>ar-al){
ar=r;
al=l;
}
r++;
l=r;
}
}
if(r-l>ar-al){
ar=r;
al=l;
}
cout<<mid[al]<<" "<<mid[ar]<<endl;
}
return 0;
}
这个是没问题的版本,但是实际上,相较于这个版本,我之前一直有问题的版本只是在最后找连续序列的循环那里设置边界条件为:j<biao而不是上面的biao-1,这里我确实是没有太理解这点的区别,最后AC也是有一定运气成分。想请教一下各位大佬这里为什么会有问题,另外如果可以的话,简单说一下会显示出问题的测试样例。
谢谢啦
相关文章
- 第九章 TCP和UDP同一时候用复用一个port实现一个回射server
- 从一个简单例子来理解js引用类型指针的工作方式
- Java 从原字符串中截取一个新的字符串 subString()
- 前端页面串联卡片的一个思路
- 如何快速理解一个全新的嵌入式操作系统(转载)
- Java自学指南一、找一个开始并能坚持下去的理由
- 对一个前端AngularJS,后端OData,ASP.NET Web API案例的理解
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)
- 一个简单例子理解C#的协变和逆变
- 一个可以参考的JVM内存分配
- 《人件(原书第3版)》—— 02 干酪汉堡,做一个,卖一个
- 浅析JavaScript如何检测文件的类型:区分文件类型的本质、关于魔数的理解、input accept文件检测存在的问题、如何检测修改后缀名后的文件类型、推荐一个文件检测JS库-file-type库及其检测原理
- 答读者问(22):一个在校学生有关持续学习的疑问及答复
- [LeetCode] 430. Flatten a Multilevel Doubly Linked List 压平一个多层的双向链表
- 在路上---一个平凡人的2016年总结及2017年展望
- 【转载】一个人的安全部之ELK接收Paloalto日志并用钉钉告警