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

Day7--滑动窗口与双指针--1695. 删除子数组的最大得分,2958. 最多 K 个重复元素的最长子数组,2024. 考试的最大困扰度

Day7–滑动窗口与双指针–1695. 删除子数组的最大得分,2958. 最多 K 个重复元素的最长子数组,2024. 考试的最大困扰度

今天要训练的题目类型是:【不定长滑动窗口】,题单来自@灵艾山茶府。

滑动窗口相当于在维护一个队列。右指针的移动可以视作入队,左指针的移动可以视作出队

不定长滑动窗口主要分为三类:求最长子数组,求最短子数组,求子数组个数。

今天的题目类型是:求最长子数组。

1695. 删除子数组的最大得分

思路【我】:

  1. 题意:就是求最大子数组和,数组里面不能有相同的元素
  2. 不定长滑动窗口三步曲:入–出–更新
class Solution {public int maximumUniqueSubarray(int[] nums) {// 题意:就是求最大子数组和,数组里面不能有相同的元素int n = nums.length;int sum = 0;int maxSum = 0;int left = 0;// 利用map<元素,出现次数>记录窗口内元素的出现次数Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < n; i++) {// 1,入sum += nums[i];map.merge(nums[i], 1, Integer::sum);// 2,出while (map.get(nums[i]) > 1) {map.merge(nums[left], -1, Integer::sum);sum -= nums[left];left++;}// 3,更新maxSum = Math.max(maxSum, sum);}return maxSum;}
}

2958. 最多 K 个重复元素的最长子数组

思路【我】:

和上一题一模一样。只需要把while (map.get(nums[i]) > 1)改成while (map.get(nums[i]) > k)

class Solution {public int maxSubarrayLength(int[] nums, int k) {int n = nums.length;int left = 0;int maxLen = 0;Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < n; i++) {// 1,入map.merge(nums[i], 1, Integer::sum);// 2,出while (map.get(nums[i]) > k) {map.merge(nums[left], -1, Integer::sum);left++;}// 3,更新maxLen = Math.max(maxLen, i - left + 1);}return maxLen;}
}

2024. 考试的最大困扰度

思路【我】:

这题关键在于理解题意。题意:窗口内T或F的数量不能!同时!超过k(可以一方超过k)。

不定长滑动窗口三步曲:入–出–更新。

class Solution {public int maxConsecutiveAnswers(String answerKey, int k) {// 题意:窗口内T或F的数量不能!同时!超过k(可以一方超过k)char[] ch = answerKey.toCharArray();int n = ch.length;int t = 0;int f = 0;int left = 0;int maxLen = 0;for (int i = 0; i < n; i++) {// 1,入if (ch[i] == 'T') {t++;} else {f++;}// 2,出(仅在T和F同时超过k)while (t > k && f > k) {if (ch[left] == 'T') {t--;} else {f--;}left++;}// 3,更新maxLen = Math.max(maxLen, i - left + 1);}return maxLen;}
}
http://www.dtcms.com/a/337219.html

相关文章:

  • 消息队列中的推模式与拉模式
  • C++/Java双平台表单校验实战:合法性+长度+防重复+Tab顺序四重守卫
  • 【从0开始学习Java | 第14篇】集合(上)
  • Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
  • 考问通系统测试分析报告
  • Golang 语言中的指针操作
  • Android中使用RxJava实现网络请求与缓存策略
  • 实习两个月总结
  • 通义万相Wan2.1- 阿里推出的开源视频生成大模型
  • 从哲学(业务)视角看待数据挖掘:从认知到实践的螺旋上升
  • Elasticsearch查询中的track_total_hits参数
  • 【网络安全实验报告】实验五:网络嗅探及安全性分析
  • 在阿里云 CentOS Stream 9 64位 UEFI 版上离线安装 Docker Compose
  • CentOS 7更换国内镜像源
  • CentOS 7安装OpenVASGVM指南
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核间通信开发案例
  • [数据结构] ArrayList 与 顺序表
  • OVS:ovn为什么默认选择Geneve作为二层隧道网络协议?
  • 【Day 30】Linux-Mysql数据库
  • 大数据计算引擎(三)——Elasticsearch入门
  • uart串口 day57
  • 产品经理如何提升职场学习能力?破除成长瓶颈
  • Vue+Flask 电影协同推荐可视化平台 前后端分离 大数据分析
  • Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
  • 05.用户和组管理命令
  • 【机器学习】FPR(False Positive Rate,误报率)是什么?
  • Zephyr下ESP32S3开发环境搭建(Linux篇)
  • 深度研究系统、方法与应用的综述
  • Transformer架构的编码器和解码器介绍
  • 管理本地用户和组:红帽企业 Linux 系统安全的基础