链接

传送门

分析

仔细读题可以发现,实际上就是找一个连续子序列,满足子序列两边的值是相等的,求这样的子序列的长度最小值。(如果中间有其它想的的数,或者是和两端相等的数,比如1,2,3,2,1或者是1,3,2, 1, 6,4,1),这种情况也可以归纳为上述情况,不再赘述。
由于数据范围为2e5,而且有多组测试,O(n^2)的算法一定不行。我们可以考虑记录每个值对应的位置,并在遍历过程中更新答案和a[i]出现的位置。如果像桶排序那样开数组的话实际上空间开销很大,所以这里应当选择用map映射。

代码

#include <iostream>
#include <map>
#include <algorithm>using namespace std;
const int N = 2e5 + 10;
const int INF = 0x3f3f3f3f;
int t, n;
int a[N];
map<int, int> pre;int main() {cin >> t;while (t--){cin >> n;pre.clear();for (int i = 1; i <= n; ++i) {cin >> a[i];}if (n < 2){printf("-1\n");continue;}int ans = INF;for (int i = 1; i <= n; ++i) {if (!pre[a[i]]){pre[a[i]] = i;}else{ans = min(ans, i - pre[a[i]] + 1);pre[a[i]] = i;}}printf("%d\n", ans == INF? -1: ans);}return 0;
}

【CF1257C】Dominated Subarray map的合理使用相关推荐

  1. 【CodeForces 1257C --- Dominated Subarray】

    [CodeForces 1257C --- Dominated Subarray] Description Let's call an array t dominated by value v in ...

  2. Codeforces 1257 C. Dominated Subarray

    Codeforces 1257 C. Dominated Subarray https://codeforces.com/contest/1257/problem/C 思路:从数组的开始将每个出现过的 ...

  3. Educational Codeforces Round 76 (Rated for Div. 2) C. Dominated Subarray

    Dominated Subarray 题意:给n个数,找出这个数组中出现数字最多且仅出现一次的子区间,简单来想即首尾数字相同区间内各个字符不同. 自我反思:一道简单的思维题,就是理解题意挺费劲的. # ...

  4. Dominated Subarray

    Dominated Subarray Let's call an array t dominated by value v in the next situation. At first, array ...

  5. Dominated Subarray[codeforces 1257C]题解

    Dominated Subarray[codeforces 1257C] CF-1257C(Dominated Subarray) 题目 输入 输出 题目大意 样例输入 样例输出 CF-1257C(D ...

  6. C. Dominated Subarray(思维)

    从n个数中找出一个字串,使得这个字串只有1个重复元素且重复次数为二,输出最短长度 #pragma GCC optimize(2) #include <bits/stdc++.h> #def ...

  7. codeforces 1257C Dominated Subarray

    题意就是找到一个最小的子区间使得这个区间中只有一个数的个数为2. AC代码: #include<cstdio> #include<cstring> #include<io ...

  8. Dominated Subarray CodeForces - 1257C

    贪心思想,确实自己做还是没有思路,看了别人的代码后豁然开朗 #include<bits/stdc++.h> using namespace std;const int maxn=2e5+1 ...

  9. Codeforces 1257C Dominated Subarray 题解

    博客观赏效果更佳 题意简述 定义"支配数组":长度>=2,且出现次数最多的那个数字唯一. 给定一个数组,请你求出这个数组中,长度最小的是"支配数组"的连续 ...

最新文章

  1. Phos 技术服务支持
  2. nodejs发送数据到html显示_用php生成HTML文件的类
  3. android广播过滤器.*,android – BroadcastReceiver与多个过滤器或多个BroadcastReceivers?...
  4. 花了几百万,创业一年学到了什么
  5. java程序员学习路线以及我的学习经验
  6. MySQL 5.7新特性
  7. 开启A20线(部分译)
  8. python程序代码大全-Python编程代码示例 - 全文
  9. 电机控制-H 桥电路 控制方式简单解析
  10. 小程序之100推荐:901~1000
  11. 2021全国高校计算机能力挑战赛程序设计赛Python组区域赛(初赛)试题及部分个人解答
  12. 客户端软件升级一般方案
  13. html 中数字换行,CSS实现连续数字和英文的自动换行的方法
  14. android中的所有activity间动画跳转
  15. Micheal Jackson 离开了我们
  16. STM32cubeide代码自动补全教程
  17. java中批量下载图片(httpClient)
  18. 衷心感谢各位给我投的票!
  19. 微信内置浏览器 非全屏播放视频解析
  20. DavaV大屏装饰组件

热门文章

  1. Ubantu连不上网,不要怕,有它就足够了
  2. 微软称RealNetworks对其投诉实属无理取闹
  3. LoRa技术-LoRa调制解调技术
  4. 树莓派3B+无显示器情况下——只用一根网线实现电脑远程控制的学习心得
  5. 计算机图形学——是什么?为什么?怎么做?
  6. prim 最小生成树算法 java实现
  7. 缤客2019年“科技贡献奖”全球七位杰出女性获奖
  8. FIR数字滤波器的设计
  9. javascript网站背景音乐
  10. 元数据管理的价值是什么?