LeetCode刷题感想之滑动窗口
发现滑动窗口也是一种经典解题思路,这一篇简单聊一下滑动窗口。
通常在碰到求XX子数组,子字符串,连续XX等题眼,可以考试用滑动窗口的思路来解决问题。
窗口的类型有几种:
1. 固定长度的窗口。
2. 窗口大小未知,求最大/最小长度的窗口。
不管是可变窗口还是固定窗口,核心思路需要指定左右指针 left 和 right。
核心思路是:
1. left = 0, 窗口的起点默认是数组的起点。
2. right 根据条件初始化,即 right - left + 1 为窗口大小(固定窗口) 或者是 right = 0(可变窗口)
3. 每一次循环中left 和 right 同时移动(固定窗口),只移动 right,只有当left满足条件时才移动(可变窗口)
4. 每次循环都判断当前窗口内的元素是否满足要求,如果是求最优解,可以继续循环直到得到最优解。
举个例子(https://leetcode-cn.com/problems/longest-subarray-of-1s-after-deleting-one-element/)
给你一个二进制数组 nums ,你需要从中删掉一个元素。
请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。
如果不存在这样的子数组,请返回 0 。
标准的滑动窗口的题目,而且是可变窗口!从核心思路来看,就是 left 和 right 初始化为0,根据条件变更 left 和 right 的位置。
class Solution {
public int longestSubarray(int[] nums) {
int res = 0, sum = 0;
int left = 0;
for(int right = 0;right<nums.length;right++){
sum += (nums[right]&1);
while(left<right && sum <= right - left-1){
if(nums[left]==1) sum--;
left++;
}
res = Math.max(res,right-left);
}
return res;
}
}
LeetCode刷题感想之滑动窗口的更多相关文章
- LeetCode刷题感想
断断续续用了半年的时间把LeetCode刷完了,之前复习了数据结构与算法.将刷题与复习数据结构结合起来会更有效果.总之不是为了刷题而刷题,而是为了巩固和补充一部分知识. LeetCode真的是一个很好 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题
大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...
- leetcode刷题目录
leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- leetcode 刷题进展
最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多 前200的吃透了 足以应付非算法岗 ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- LeetCode刷题总结之双指针法
Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
随机推荐
- NDK 减少 so 库体积方法总结
. 使用 strip 使用 NDK toolchain 可以把调试的 C++ 符号表(Symbol Table)中数据删除,我们一般我们打成 APK 会自动帮我们做这个工作,当然也可以手动设置: 手动 ...
- npm 更改在线仓库镜像地址
node 安装后,npm 的默认在线仓库镜像地址为: https://registry.npmjs.org/ 使用 npm get registry 命令可以获取到: 为了使用 npm 能够更快的下载 ...
- 制作docker php5.6的镜像
docker pull centos Docker run -it --name="centos-test" centos yum install wget # 报错在后面有处理 ...
- 远程ubuntu虚拟机(VirtualBox)
环境 实机win10,虚拟软件是Oracle VM VirtualBox 下载地址https://www.virtualbox.org/ ubuntu虚拟机配置 网络选桥接网卡, 原因是桥接网卡下,根 ...
- GIT迁移仓库地址时如何保留分支和历史记录
需求背景 GIT仓库(GitLab)所在服务器因某些原因要关停,相关服务需转移到另外一台机器上. 操作步骤 # clone项目 git clone --mirror http://192.168.12 ...
- vue - axios简单封装
分析: (1)axios处理接口请求.可能需处理请求拦截,响应拦截,不同类型的请求,所以需要一个http.js文件 (2)请求都是基于相关环境的,所以需要一个url.js处理环境 (3)可根据不同模块 ...
- PHP开启缓存加速
PHP默认会将Operate Code文件丢弃,缓存加速是将其保存下来,放置共享内存中,以便在下次调用该PHP页面时重用,避免相同代码的重复编译 __________________________ ...
- robots.txt详解[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君. 怎样查看robots文件? 浏览器输入 主域名/robots.txt robots.txt的作用 robots.txt 文件规定了搜索引擎抓取工具可以访问网站 ...
- oracle查看归档信息
1.查看归档信息 show parameter recovery_file_dest #查看归档目录 show parameter recovery_file_dest_size #查看归档可以存储的 ...
- 全新BPMN常用图形标识一览表
BPMN符号与BPMN的关系 BPMN,即业务流程建模与标记(手法),表达此类手法的即是业务流程模型示意图.业务流程示意图是由一系列的元素符号构成.作为BPMN的基础,这些符号将业务流程建模简单化.图 ...