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

【滑动窗口】个人练习-Leetcode-992. Subarrays with K Different Integers

题目链接:https://leetcode.cn/problems/subarrays-with-k-different-integers/description/

题目大意:给一个数组nums[],求【不同元素刚好为k个】的子列的个数。子列要求连续。

思路:主要是转换题意,可以先求【不同元素最多为k个】的子列数,然后再求【不同元素最多为k-1个】的子列数,两者相减就是【不同元素刚好为k个】的子列数。思路有点像前缀和。

那么可以用滑动窗口来解决。对于每一个固定的右端点r,找一个左端点l(从最左边开始找)使得刚好[l, r]区间里的不同元素个数刚好为k(这样就是最多为k个的情况)。然后这个l可以作为下一轮的新起点,因为下一轮r往右移动了,使得不同元素数只会增加或者不变,l没必要再从0开始,只要从上一轮的l开始就行了。

每一轮中的r-l刚好就是【新增子列数】,因为新增子列是连续的,并且必然包含nums[r],这些子列即为以r为右端点,长度为1, 2, ..., r-l的子列。

完整代码

class Solution {
public:int kDis(vector<int>& nums, int k) {int n = nums.size();vector<int> freq(n+1, 0);int l = 0, r = 0, res = 0;int disn = 0;while (r < n) {if (freq[nums[r]] == 0)disn++;freq[nums[r]]++;r++;while (disn > k) {freq[nums[l]]--;if (freq[nums[l]] == 0)disn--;l++;}res += r - l;}return res;}int subarraysWithKDistinct(vector<int>& nums, int k) {return kDis(nums, k) - kDis(nums, k-1);}
};

相关文章:

  • 解决前端登录成功之后,往后端发请求携带cookie问题
  • DB-GPT 文档切分报错
  • 猫头虎分享[可灵AI」官方推荐的驯服指南-V1.0
  • LLDP 基本原理
  • 大数据面试题之MapReduce(3)
  • 基于微服务智能推荐健康生活交流平台的设计与实现(SpringCloud SpringBoot)+文档
  • 【C++】vector的底层原理及实现
  • 以智领航 鸿翼助力企业构筑智能化知识管理体系
  • Spring Boot中的热部署配置
  • sheng的学习笔记-hive框架原理
  • 金融科技企业的数据治理与合规挑战:平衡创新与监管的关键战役
  • 什么是定时器?
  • nginx优化和防盗链
  • 使用目标检测模型YOLO V10 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)
  • MySQL 教程
  • 深入了解以太坊
  • [deviceone开发]-do_Webview的基本示例
  • 「译」Node.js Streams 基础
  • 【附node操作实例】redis简明入门系列—字符串类型
  • ➹使用webpack配置多页面应用(MPA)
  • gops —— Go 程序诊断分析工具
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • javascript面向对象之创建对象
  • SegmentFault 2015 Top Rank
  • 关于 Cirru Editor 存储格式
  • 什么软件可以剪辑音乐?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • nb
  • C# - 为值类型重定义相等性
  • 阿里云API、SDK和CLI应用实践方案
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​MySQL主从复制一致性检测
  • ###C语言程序设计-----C语言学习(3)#
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $$$$GB2312-80区位编码表$$$$
  • $(selector).each()和$.each()的区别
  • (0)Nginx 功能特性
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (42)STM32——LCD显示屏实验笔记
  • (bean配置类的注解开发)学习Spring的第十三天
  • (办公)springboot配置aop处理请求.
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)linux下的时间函数使用
  • (转)Mysql的优化设置
  • (转)关于pipe()的详细解析
  • (转)树状数组
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • *p++,*(p++),*++p,(*p)++区别?
  • .chm格式文件如何阅读
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net Application的目录
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET使用存储过程实现对数据库的增删改查