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

LeetCode 2962 统计最大元素出现至少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.mrgr.cn/news/100768.html

相关文章:

  • 【C++类和数据抽象】消息处理示例(1):从设计模式到实战应用
  • 【C++类和数据抽象】消息处理示例(2)
  • Linux运维——Vim基础
  • 大数据测试集群环境部署过程中各种问题
  • 掌握 Linux 中 SELinux 的强制访问控制机制和 iptables、 firewalld 两种防火墙以及他们的使用方法
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)
  • 【无报错,亲测有效】如何在Windows和Linux系统中查看MySQL版本
  • ComfyUI 学习笔记:安装篇及模型下载
  • 基于 ChatGPT 分析业务层在事务中高频建表然后删除或者回滚导致 pg_dump 概率出现备份失败问题
  • Git操作指令
  • [C语言]猜数字游戏
  • Python三大Web框架对比:Django、Flask、Tornado的异步实现方式详解
  • 计算机毕业设计--基于深度学习(U-Net与多尺度ViT)的模糊车牌图像清晰化复原算法设计与实现(含Github代码+Web端在线体验链接)
  • [Unity]-[UI]-[Prefab] 关于Unity UGUI 的布局及组件讲解
  • ESP32- 开发笔记- 软件开发 4 - GPIO 口
  • 在C# WebApi 中使用 Nacos02: 配置管理、服务管理实战
  • MySQL 实战 45 讲 笔记 ----来源《极客时间》
  • 【MCP教程系列】如何自己打包MCP服务并部署到阿里云百炼上【nodejs+TypeScript】搭建自己的MCP【Cline】
  • 各服务日志: Grok正则解析
  • Axure疑难杂症:全局变量典型应用及思考逻辑(玩转全局变量)