当前位置: 首页 > backend >正文

算法题(136):逛画展

审题:
本题需要我们找出区间元素最少的,包含(1~m)编号的区间左边界和右边界

思路:
方法一:暴力搜索

我们可以对每一个子段进行双重for循环搜索,然后用mp数组和kind变量来判断是否满足包含1~m所有编号的条件,若满足就进行区间缩小,缩小后根据区间大小判断是否保存边界

时间复杂度为:O(n*n),而n最大为1e6,所以循环次数为1e12,一定超时

方法二:双指针(滑动窗口)

我们可以让right指针不回退,然后用mp数组维护left和right之间的区间。就而只进行一次遍历,将时间复杂度降低为O(n)

解题:
(1)变量定义

#include<iostream>
using namespace std;
int n, m;
const int N = 1e6 + 10;
int a[N];
int kind;//记录无重复数据个数
int mp[N];//记录i在区间内出现次数
pair<int, int> pos(1,N);//维护边界

kind:当该编号是第一次进入区间的时候,也就是mp[a[right]] == 0,此时我们就让kind++

pair类型的变量pos可以用于记录边界值

(2)main函数

int main()
{//数据录入cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i];}//进行搜索int left = 1;for (int right = 1; right <= n; right++){if (mp[a[right]] == 0)//新的编号进入区间{	kind++;}mp[a[right]]++;while (kind == m){mp[a[left]]--;if (mp[a[left]] == 0) kind--;//更新边界值if (kind == m - 1){int oldsize = pos.second - pos.first + 1;if (right - left + 1 < oldsize){pos.first = left;pos.second = right;}}left++;}	}cout << pos.first << " " << pos.second << endl;return 0;
}

注意:
1.更新时机:在缩短区间刚好使kind减为m-1的时候我们进行边界更新判断,不同的题目更新时机会有所不同

2.由于size一样的时候我们保留左边界更小的,也就是更早更新的边界,所以我们的边界更新条件就变成了新的size小于oldsize才更新

P1638 逛画展 - 洛谷

http://www.xdnf.cn/news/2860.html

相关文章:

  • 如何利用谷歌趋势精确估算关键词搜索量?
  • DDI0487--A1.3
  • 阿里云服务器云盘扩容
  • 【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征
  • 更新日期自动填充
  • LeetCode 热题 100_最小路径和(92_64_中等_C++)(多维动态规划)
  • TypeScript之type
  • IEEE会议:第十届网络安全与信息工程国际会议(ICCSIE 2025)
  • 资产定位解决方案:蓝牙Beacon如何实现低成本高效追踪
  • 【Android】谈谈DexClassLoader
  • dx11 龙书学习 第四章 dx11 准备工作
  • Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)
  • 天梯——链表去重
  • 基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计
  • 深度学习大模型: AI 阅卷替代人工阅卷
  • Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理
  • J-Link RTT打印输出调试信息
  • 深入蜂窝物联网:第二章 深度解读 NB-IoT:协议栈、部署与典型应用
  • 两地三中心
  • MySQL数据库(14)—— 使用C操作MySQL
  • 【ACL系列论文写作指北03-相关工作怎么写】-展示视野与定位创新
  • leetcode283-移动零
  • 第二章 信息技术发展(2.2 新一代信息技术及应用)
  • Linux428 chmod 0xxx 1xxx 2xxx 4xxx;umask;chown 属主属组 软件包rpm
  • ECharts散点图-散点图20,附视频讲解与代码下载
  • php数据库连接
  • Docker安装的mysql限制ip访问
  • [三分钟]web自动化测试(三):selenium自动化测试常用函数(下)
  • 基于蓝牙Beacon人员导航方案
  • 【Linux】第十二章 安装和更新软件包