LeetCode 209. 长度最小的子数组
1.LeetCode 203. 移除链表元素2.LeetCode 206. 反转链表3.LeetCode 24. 两两交换链表中的节点4.LeetCode 19. 删除链表的倒数第 N 个结点5.LeetCode 160. 相交链表6.LeetCode 142. 环形链表 II7.LeetCode 242. 有效的字母异位词8.LeetCode 349. 两个数组的交集9.LeetCode 202. 快乐数10.LeetCode 704. 二分查找 题解11.LeetCode 27. 移除元素 题解12.LeetCode 977. 有序数组的平方
13.LeetCode 209. 长度最小的子数组
14.LeetCode 59. 螺旋矩阵 II15.LeetCode 1. 两数之和16.LeetCode 454. 四数相加 II17.LeetCode 383. 赎金信18.LeetCode 15. 三数之和19.LeetCode 18. 四数之和20.LeetCode 76. 最小覆盖子串21.LeetCode 344. 反转字符串22.LeetCode 541. 反转字符串 II23.LeetCode 剑指 Offer 05. 替换空格24.LeetCode 151. 反转字符串中的单词25.LeetCode 剑指 Offer 58 - II. 左旋转字符串26.LeetCode 459. 重复的子字符串27.kmp算法详解28.LeetCode 20. 有效的括号29.LeetCode 1047. 删除字符串中的所有相邻重复项30.LeetCode 150. 逆波兰表达式求值31.LeetCode 239. 滑动窗口最大值32.LeetCode 347. 前 K 个高频元素33.LeetCode 94. 二叉树的中序遍历34.LeetCode 144. 二叉树的前序遍历35.LeetCode 145. 二叉树的后序遍历36.LeetCode 102. 二叉树的层序遍历37.LeetCode 226. 翻转二叉树38.LeetCode 101. 对称二叉树39.LeetCode 104. 二叉树的最大深度40.LeetCode 559. N 叉树的最大深度41.LeetCode 111. 二叉树的最小深度42.LeetCode 222. 完全二叉树的节点个数43.LeetCode 110. 平衡二叉树44.LeetCode 257. 二叉树的所有路径45.LeetCode 404. 左叶子之和46.LeetCode 513. 找树左下角的值47.LeetCode 112. 路径总和48.LeetCode 113. 路径总和 II49.LeetCode 106. 从中序与后序遍历序列构造二叉树50.LeetCode 105. 从前序与中序遍历序列构造二叉树51.LeetCode 654. 最大二叉树52.LeetCode 617. 合并二叉树53.LeetCode 700. 二叉搜索树中的搜索54.LeetCode 98. 验证二叉搜索树55.LeetCode 530. 二叉搜索树的最小绝对差56.LeetCode 501. 二叉搜索树中的众数57.LeetCode 236. 二叉树的最近公共祖先58.LeetCode 235. 二叉搜索树的最近公共祖先59.LeetCode 701. 二叉搜索树中的插入操作60.LeetCode 450. 删除二叉搜索树中的节点61.LeetCode 669. 修剪二叉搜索树62.LeetCode 108. 将有序数组转换为二叉搜索树63.LeetCode 538. 把二叉搜索树转换为累加树64.LeetCode 131. 分割回文串本题是一个滑动窗口的题,
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
在本题中实现滑动窗口,主要确定如下三点:
窗口内是什么?窗口就是 满足其和 ≥ target 的长度最小的 连续 子数组。
如何移动窗口的起始位置?窗口的起始位置如何移动:如果当前窗口的值大于target了,窗口就要向前移动了(也就是该缩小了)。
如何移动窗口的结束位置?窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
代码如下:
func minSubArrayLen(target int, nums []int) int {
n:=len(nums) //数组的长度
sum:=0 //表示每一段子数组的总和
res:=n+1 //最终的结果(最小的连续子数组个数)初始化为n+1,目的是为了判断“不存在符合条件的子数组,返回0”的情况
for i,j:= 0,0;i < n;i++{ //i 表示滑动口的终止位置,j表示滑窗动窗口的起始位置,初始时都是 0
sum += nums[i] //加上该元素
// 注意这里使用for,每次更新 j(起始位置),并不断比较子序列是否符合条件
for sum >= target{
sublength := i - j + 1 //sublength滑动窗口的长度
if sublength < res { //res始终保存的是满足结果的连续子数组长度的最小值
res = sublength
}
sum -= nums[j] // 这里体现出滑动窗口的精髓之处,不断变更j(子序列的起始位置)
j++
}
}
if res == n+1 {
res = 0
}
return res
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理