当前位置: 首页 > 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.xdnf.cn/news/1324909.html

相关文章:

  • JavaSE——高级篇
  • Java面试宝典:Redis 入门与应用
  • Poisson分布:稀有事件建模的理论基石与演进
  • 用随机森林填补缺失值:原理、实现与实战
  • 力扣hot100:移动零问题的巧妙解决:双指针与原地交换策略(283)
  • 开发避坑指南(28):Spring Boot端点检查禁用失效解决方案
  • Vue3 中使用 Element Plus 完整指南
  • Spring AI Alibaba 项目接入兼容 OpenAI API 的大模型
  • 杂记 05
  • 母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南
  • Android使用Kotlin协程+Flow实现打字机效果
  • Python 作用域 (scope) 与闭包 (closure)
  • 【学习嵌入式-day-27-进程间通信】
  • Docker常见指令速查
  • 用户认证技术
  • STL库——string(类函数学习)
  • SQL详细语法教程(六)存储+索引
  • AI心理助手开发文档
  • 在python中等号左边的都是对象,在matlab中等号a = 3+2 a就是个变量
  • 力扣hot100:盛最多水的容器:双指针法高效求解最大容量问题(11)
  • openfeign 只有接口如何创建bean的
  • Linux设备树简介
  • vue3入门-v-model、ref和reactive讲解
  • Leetcode 16 java
  • Effective C++ 条款49:了解new-handler的行为
  • 力扣 hot100 Day77
  • 单片机驱动LCD显示模块LM6029BCW
  • 机器翻译论文阅读方法:顶会(ACL、EMNLP)论文解析技巧
  • STM32学习笔记14-I2C硬件控制
  • 大数据计算引擎(四)—— Impala