LeetCode 2906 统计最大元素出现至少K次的子数组(滑动窗口)

给出一个示例:

输入:nums = [1,3,2,3,3], k = 2
输出:6
解释:包含元素 3 至少 2 次的子数组为:[1,3,2,3]、[1,3,2,3,3]、[3,2,3]、[3,2,3,3]、[2,3,3] 和 [3,3] 。

该题也是一个比较简单的滑动窗口的题目,但是奈何我把题目看错了,导致一直想不到好的解决的方法,我把该题的【nums中的最大元素】省略掉了,看成了该数组中存在子数组的任意一个数只要有数量大于等于k的子数组有多少个。

所以理所应到的想到了用前缀和加滑动窗口,构造一个二维前缀和去统计每个值的出现次数,再通过遍历后的右边界减前边界得到,该区间的所有值的个数,如果有大于等于k的就记一次

class Solution {public long countSubarrays(int[] nums, int k) {int n = nums.length;int mx = Integer.MIN_VALUE;for(int num:nums){mx = Math.max(mx,num);}int[][] ans = new int[n+1][mx+1];for(int i=1;i<n+1;i++){ans[i][nums[i-1]]++;}int number = 0;for(int i=2;i<n+1;i++){int left = i-k;int right = i;for(int j=1;j<=mx;j++){if(ans[right][j]-ans[left][j]>=k) number++;}}return number;}
}

但代码本身还是存在问题且复杂度过高,很可能通过不了,爆超时等等。反应过来后,再重新理清了一遍思路和题目,才发现就是一个简单的滑动窗口,还是那句话,外循环右扩展,内循环左收缩。

class Solution {public long countSubarrays(int[] nums, int k) {int max = Integer.MIN_VALUE;for (int num : nums) {max = Math.max(max, num);}long res = 0;int count = 0;int left = 0;for (int right = 0; right < nums.length; right++) {if (nums[right] == max) {count++;}while (count >= k) {// 当前窗口满足条件,从 right 到数组末尾的所有子数组都满足res += nums.length - right;if (nums[left] == max) {count--;}left++;}}return res;}
}

错误代码就不解释了,解释一下我的正确代码。

先通过遍历找到最大值mx

然后开始滑动窗口,拿[1,3,2,3,3] k=2举例吧

先遍历右边界,使得mx值的数量大于等于k 得到对应的r=3坐标,当前子数组记作[1,3,2,3][1,3,2,3,3]

然后通过内循环遍历左边界,每遍历一次,只要还能进入内循环就说明子数组符合要求记res+=nums.length - right 那为什么是nums.length - right呢,其实就是上面记作的子数组的数目,当left++后去除了子数组的1,子数组成为了[3,2,3][3,2,3,3]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Spring Boot 进行开发

✨ 使用 Spring Boot 进行开发 ✨ &#x1f4cc; 本节将深入介绍如何高效使用 Spring Boot&#xff0c;涵盖以下核心主题&#xff1a; 1️⃣ &#x1f527; 构建系统 深入了解 Spring Boot 的项目结构和依赖管理 2️⃣ ⚙️ 自动配置 探索 Spring Boot 的自动化配置机制和原…

Qt的WindowFlags窗口怎么选?

Qt.Dialog: 指示窗口是一个对话框&#xff0c;这通常会改变窗口的默认按钮布局&#xff0c;并可能影响窗口框架的样式。Qt.Popup: 指示窗口是一个弹出式窗口&#xff08;例如菜单或提示&#xff09;&#xff0c;它通常是临时的且没有任务栏按钮。Qt.Tool: 标识窗口作为一个工具…

Redis高可用架构全解析:主从复制、哨兵模式与集群实战指南

Redis高可用架构全解析&#xff1a;主从复制、哨兵模式与集群实战指南 引言 在分布式系统架构中&#xff0c;Redis作为高性能内存数据库的标杆&#xff0c;其高可用与扩展性设计始终是开发者关注的焦点。本文将深入剖析Redis的三大核心机制——主从复制、哨兵模式与集群架构&…

音视频之H.265/HEVC网络适配层

H.265/HEVC系列文章&#xff1a; 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 4、音视频之H.265/HEVC变换编码 5、音视频之H.265/HEVC量化 6、音视频之H.265/HEVC环路后处理 7、音视频之H.265/HEVC熵编…

element-plus(vue3)表单el-select下拉框的远程分页下拉触底关键字搜索实现

一、基础内核-自定义指令 1.背景 2.定义 3.使用 4.注意 当编辑时需要回显&#xff0c;此时由于分页导致可能匹配不到对应label文本显示&#xff0c;此时可以这样解决 二、升级使用-二次封装组件 三、核心代码 1.自定义指令 定义 ----------------selectLoadMoreDirective.…

大内存生产环境tomcat-jvm配置实践

话不多讲&#xff0c;奉上代码&#xff0c;分享经验&#xff0c;交流提高&#xff01; 64G物理内存,8核CPU生产环境tomcat-jvm配置如下&#xff1a; JAVA_OPTS-server -XX:MaxMetaspaceSize4G -XX:ReservedCodeCacheSize2G -XX:UseG1GC -Xms48G -Xmx48G -XX:MaxGCPauseMilli…

C++函数模板基础

1 函数模板 1.1 基础介绍 函数模板是一种特殊的函数定义,它允许你创建通用的函数,这些函数可以处理多种不同的数据类型,而不需要为每种数据类型都编写一个单独的函数。 在 C++ 里,函数模板的格式包含模板声明与函数定义两部分,其基本格式如下: template <typename…

mangodb的数据库与集合命令,文档命令

MongoDB的下载安装与启动&#xff0c; 一、MongoDB下载安装 1. 官网下载 打开官网&#xff1a;https://www.mongodb.com/try/download/community选择&#xff1a; 版本&#xff08;Version&#xff09;&#xff1a;选最新版或者根据需要选旧版。平台&#xff08;OS&#xff0…

flink端到端数据一致性

这里有一个注意点&#xff0c;就是flink端的精准一次 1.barrier对齐精准和一次非对齐精准一次 对比​​ ​​维度​​​​Barrier 对齐的精准一次​​​​Barrier 非对齐的精准一次​​​​触发条件​​需等待所有输入流的 Barrier 对齐后才能触发检查点 收到第一个 Barrier …

4月29号

级别越大,字体越小. CSS样式控制: 例如把日期设为灰色字体

PHP代码-服务器下载文件页面编写

内部环境的服务资源下载页面有访问需求&#xff0c;给开发和产品人员编写一个简洁的下载页面提供资源下载。直接用nginxphp的形式去编写了&#xff0c;这里提供展示index.php文件代码如下&#xff1a; <?php // 配置常量 define(BASE_DIR, __DIR__); // 当前脚本所在目录作…

MySQL基础关键_001_认识

目 录 一、概述 1.数据库&#xff08;DB&#xff09;分类 &#xff08;1&#xff09;关系型数据库 &#xff08;2&#xff09;非关系型数据库 2.数据库管理系统&#xff08;DBMS&#xff09; 3.SQL &#xff08;1&#xff09;说明 &#xff08;2&#xff09;分类 二、…

Shell、Bash 执行方式及./ 执行对比详解

Shell、Bash 执行方式及./ 执行对比详解 在 Linux 和 UNIX 系统的使用过程中&#xff0c;Shell 脚本是实现自动化任务、系统管理的重要工具。而在执行 Shell 脚本时&#xff0c;我们常常会用到bash命令以及./的执行方式&#xff0c;这两种执行方式看似相似&#xff0c;实则存在…

P1494 [国家集训队] 小 Z 的袜子 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 q q q 次查询&#xff0c;每次查询给定 ( l , r ) (l,r) (l,r). 你需要求出 2 ∑ i ≤ i < j ≤ r [ a i a j ] ( r − l ) ( r − l 1 ) \dfrac{2\sum…

解决vue3 路由query传参刷新后数据丢失的问题

前言&#xff1a;在页面刷新的时候&#xff0c;路由query数据会被清空&#xff0c;网上很多方法说query传参可以实现&#xff0c;反正我是没有实现 思路&#xff1a;将数据保存到本地&#xff0c;通过 “ &#xff1f;” 进行判断是否有数据&#xff0c;页面销毁的时候删除本地…

IIC小记

SCL 时钟同步线&#xff0c;由主机发出。 当SCL为高电平&#xff08;逻辑1&#xff09;时是工作状态&#xff0c;低电平&#xff08;逻辑0&#xff09;时是休息状态。SCL可以控制通信的速度。 SDA 数据收发线 应答位&#xff1a;前八个工作区间是一个字节&#xff0c;在SCL…

Linux[开发工具]

vim(多模式编辑器) vim是一个多模式的编译器!!命令模式是核心 vim 文件名 (数字)(进入编辑,光标处在第几行) esc切换模式 shift; >:(:wq保存并退出) 命令模式: 键盘的输入,默认被当做命令来看待 gg:光标快速定位到最开始 shiftgG:股那个表快速定位到最结尾 nshiftgG:光标…

hutools工具类中isNotEmpty与isNotBlank区分

基于以下两种情况。在判断的变量是String类型时&#xff0c; 判断是否为空&#xff0c;推荐使用isNotBlank(). 1. isNotEmpty 不会验证str中是否含有空字符串&#xff0c;而 isNotBlank方法会验证 public static boolean isNotEmpty(CharSequence str) {return false isEmpty…

算法相关概念

1 算法概述 1.1 算法概念 算法是特定问题求解步骤的描述&#xff0c;也是独立存在的一种解决问题的思想和方法 对于算法而言&#xff0c;实现他的编程语言无关紧要&#xff0c;重要的是思想和方法&#xff01;&#xff01;&#xff01; 公式&#xff1a;程序算法数据结构&a…

数据库基础与核心操作:从概念到实战的全面解析

目录 1 基本概念2 基本操作2.1 DCL2.2 DDL2.3 DML2.4 DQL(高级查询) 3 高级功能3.1 视图&#xff08;无参函数&#xff09;3.2 存储过程(有参函数)3.3 触发器 4 约束4.1 主键约束4.2 UNIQUE KEY&#xff08;唯一键约束&#xff09;4.3 FOREIGN KEY&#xff08;外键约束&#xf…