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

【算法】day3 滑动窗口


总结了一个规律:滑动窗口基本上,跟子串、子数组有关。

1、无重复字符的最长字串

题目:3. 无重复字符的最长子串 - 力扣(LeetCode)

思路:

代码:

class Solution {public int lengthOfLongestSubstring(String s) {// 字符串转字符数组char[] chars = s.toCharArray();int left = 0, right = 0;int max_len = 0;int[] hash = new int[128]; // 英文字母、数字、空格while(right < chars.length) {hash[chars[right]]++; // 进窗口while(hash[chars[right]] > 1) {hash[chars[left++]]--; // 出窗口}max_len = Math.max(max_len, right - left + 1); // 更新结果right++;}return max_len;}
}

2、最大连续 1 的个数

题目:1004. 最大连续1的个数 III - 力扣(LeetCode)

思路:最多反转 k 个 0,找到连续 1 的最长长度。相当于,找到一个最多包含 k 个 0 且最长的子数组。

代码:

class Solution {public int longestOnes(int[] nums, int k) {int left = 0, right = 0;int max_len = 0;int count = 0;while(right < nums.length) {if(nums[right] == 0) count++; // 进窗口while(count > k) {// 出窗口if(nums[left] == 0) count--;left++;}max_len = Math.max(max_len, right - left + 1); // 更新结果right++;}return max_len;}
}

3、将 x 减到 0 的最小操作数

题目:1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

思路:两边删除最少的数,这些数达到 x。换个思路,找到最长的连续子数组,这些数的和刚好达到 target = sum - x

                                                             

代码:

class Solution {public int minOperations(int[] nums, int x) {// 找最长连续子数组,使之和恰好为 sum-xint sum = 0;int n = nums.length;for(int i = 0; i < n; i++) sum += nums[i]; // 求数组和int target = sum - x; // 恰好为 targetint max_len = -1; // 返回结果if(target < 0) return max_len; // 数组凑不齐 xint left = 0, right = 0;int tmp = 0; // 当前子数组和while(right < n) {tmp += nums[right]; // 进窗口while(tmp > target) {tmp -= nums[left++]; // 出窗口}if(tmp == target) {max_len = Math.max(max_len, right-left+1); // 更新结果}right++;}if(max_len == -1) return max_len;return n - max_len; // 最少操作数}
}

文章转载自:

http://nMdf8NYE.mysmz.cn
http://6MAAO7zE.mysmz.cn
http://ZfmmOs6S.mysmz.cn
http://aLwi6Bqq.mysmz.cn
http://aQXjrZZN.mysmz.cn
http://H6TaZWMX.mysmz.cn
http://0AJ473QB.mysmz.cn
http://frQVVCxD.mysmz.cn
http://rKFsF8RO.mysmz.cn
http://8GUEToux.mysmz.cn
http://IlhlqOCg.mysmz.cn
http://XsxDPVXD.mysmz.cn
http://bcrcaAWt.mysmz.cn
http://Gtjarx5w.mysmz.cn
http://6el5PgqX.mysmz.cn
http://2P3Ztpdo.mysmz.cn
http://ahUeGdAj.mysmz.cn
http://ZegdI8XR.mysmz.cn
http://C7BKwjlY.mysmz.cn
http://0HgUbh2c.mysmz.cn
http://nqlzc4U0.mysmz.cn
http://GVdKNO6f.mysmz.cn
http://ED33NAl5.mysmz.cn
http://WRDtNFFZ.mysmz.cn
http://yqti6w8G.mysmz.cn
http://tpXzYkU8.mysmz.cn
http://69flVRYj.mysmz.cn
http://4uJPO4DN.mysmz.cn
http://iNlyHkob.mysmz.cn
http://3CMejv6B.mysmz.cn
http://www.dtcms.com/a/388140.html

相关文章:

  • 时序数据库在工业互联网中的五大核心指标
  • 新闻投稿平台哪家好?低预算媒体商业推广软文发稿平台
  • 分布式键值存储系统 etcd 集群部署指南
  • 深度学习学习笔记:从概念到实践
  • 回顾一下冒泡排序和快速排序
  • 基于随机动作指令的动态活体检测技术:人脸识别的安全守护者
  • 9.17 学习记录
  • 桥接、NAT和仅主机模式【介绍】
  • C语言程序从开发到单片机执行:编译、存储与运行机制详解
  • 利用云手机实现热血江湖游戏多开
  • Leetcode学习(灵神精讲题)167. 两数之和 II - 输入有序数组(相向双指针)
  • 力扣习题哈希表篇:两句话中不常见单词
  • 分布式流处理与消息传递——向量时钟 (Vector Clocks) 算法详解
  • 车载诊断架构 --- 无车辆识别码(VIN)时的车辆声明报文规范
  • 解读智慧政务云计算数据中心建设方案【附全文阅读】
  • 潜水员戴夫团队新作《纳克园 最后的乐园》开发顺利!
  • 第十八章 Arm C1-Premium Core 嵌入式追踪扩展 (ETE) 详解
  • 理解 multipart/form-data 中的 boundary:文件上传的关键
  • rust中的“继承”
  • PAT乙级_1087 有多少不同的值_Python_AC解法_无疑难点
  • 007 Rust字符串
  • 使用 Compose 部署 WordPress
  • Golang语言入门篇006_关键字与保留字详解
  • Class60 Transformer
  • Redis 线上故障案例分析:从救火到防火的实战指南
  • uv虚拟环境起名
  • YASKAWA安川机器人铝材焊接节气之道
  • 2025 AIME Benchmark:AI 在奥数领域的最新进展
  • 【ubuntu24.04】删除6.14内核升级6.11.0-29-generic内核nvidia驱动535到550
  • nvm下载低版本node