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

embedded/2024/9/23 1:44:40/

题目链接: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);}
};

http://www.ppmy.cn/embedded/56381.html

相关文章

ROS2开发机器人移动

.创建功能包和节点 这里我们设计两个节点 example_interfaces_robot_01&#xff0c;机器人节点&#xff0c;对外提供控制机器人移动服务并发布机器人的状态。 example_interfaces_control_01&#xff0c;控制节点&#xff0c;发送机器人移动请求&#xff0c;订阅机器人状态话题…

Victor CMS v1.0 SQL 注入漏洞(CVE-2022-28060)

前言 CVE-2022-28060 是 Victor CMS v1.0 中的一个SQL注入漏洞。该漏洞存在于 /includes/login.php 文件中的 user_name 参数。攻击者可以通过发送特制的 SQL 语句&#xff0c;利用这个漏洞执行未授权的数据库操作&#xff0c;从而访问或修改数据库中的敏感信息。 漏洞详细信…

使用并联升压转换器的大功率音频放大器方案

用于大功率便携式扬声器&#xff08;如手推车扬声器&#xff09;的音频放大器通常使用锂离子电池供电&#xff0c;这些电池可以从单节电池到串联的几节电池不等。设计人员通常使用升压转换器为音频放大器产生电压&#xff0c;因为扬声器的功耗可能超过几百瓦。 出于成本考虑&am…

数据结构预科

在堆区申请两个长度为32的空间&#xff0c;实现两个字符串的比较【非库函数实现】 要求&#xff1a; 1> 定义函数&#xff0c;在对区申请空间&#xff0c;两个申请&#xff0c;主函数需要调用2次 2> 定义函数&#xff0c;实现字符串的输入&#xff0c;void input(char …

「ETL趋势」FDL定时任务区分开发/生产模式、API输入输出支持自定义响应解析

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.7最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

百日筑基第十一天-看看SpringBoot

百日筑基第十一天-看看SpringBoot 创建项目 Spring 官方提供了 Spring Initializr 的方式来创建 Spring Boot 项目。网址如下&#xff1a; https://start.spring.io/ 打开后的界面如下&#xff1a; 可以将 Spring Initializr 看作是 Spring Boot 项目的初始化向导&#xff…

HTMLCSS(入门)

HTML <html> <head><title>第一个页面</title></head><body>键盘敲烂&#xff0c;工资过万</body> </html> <!DOCTYPE>文档类型声明&#xff0c;告诉浏览器使用哪种HTML版本显示网页 <!DOCTYPE html>当前页面采取…

STM32F1+HAL库+FreeTOTS学习3——任务创建(动态和静态两种)

STM32F1HAL库FreeTOTS学习3——任务创建&#xff08;动态和静态两种&#xff09; 任务创建API函数任务创建流程代码实现1. 动态任务创建和删除2. 静态任务创建和删除 上期我们学习了STM32移植FreeRTOS搭建基准工程&#xff0c;现在我们来学习任务创建 任务创建API函数 前面我们…