Leetcode--209. 长度最小的子数组
初始化两个指针 i 和 j,都从数组的起点开始。 使用 sum 来记录当前窗口的和。 当 sum 小于 s 且 j 没有达到数组的末尾时,继续扩大窗口。 当 sum 大于等于 s 时,记录当前窗口的长度,并尝试减少窗口的长度。 继续调整窗口的位置,直到找到最小的窗口长度。 初始化变量:i 和 j 指针都初始化为 0,sum 用于记录当前窗口的和,t 用于记录最小窗口的长度。 扩大窗口:当 sum 小于 s 且 j 没有到达数组的末尾时,继续扩大窗口,直到满足条件。 缩小窗口:当 sum 大于等于 s 时,开始尝试缩小窗口,记录当前窗口的长度,并更新最小长度 t。 返回结果:如果没有找到符合条件的子数组,返回 0;否则返回最小窗口长度 t。
发布日期:2021-04-30 21:06:36
浏览次数:67
分类:精选文章
本文共 1429 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
方法思路
我们可以使用双指针法来解决这个问题。双指针法的基本思想是使用两个指针来滑动窗口,记录当前窗口的和。当窗口的和大于等于 s 时,尝试减少窗口的长度;当窗口的和小于 s 时,扩大窗口的长度。
具体步骤如下:
解决代码
public class Solution209 { public static int minSubArrayLen(int s, int[] nums) { int i = 0, j = 0, sum = 0; int t = Integer.MAX_VALUE; // 扩大窗口,直到和 >= s 或者 j 到达末尾 while (j < nums.length && sum < s) { sum += nums[j]; j++; } // 如果和已经满足条件,开始尝试缩小窗口 if (sum >= s) { t = j - i; // 尽量缩小窗口 while (i < j && sum >= s) { sum -= nums[i]; i++; // 更新最小长度 if (j - i < t) { t = j - i; } } } // 如果没有找到符合条件的子数组,返回0 return t != Integer.MAX_VALUE ? t : 0; } public static void main(String[] args) { int[] nums = {2, 3, 1, 2, 4, 3}; int s = 7; System.out.println(minSubArrayLen(s, nums)); }} 代码解释
这种方法确保了在 O(n) 时间复杂度内解决问题,适用于处理较大的数组。
发表评论
最新留言
表示我来过!
[***.240.166.169]2026年06月20日 19时03分12秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP中array_merge和array相加的区别分析
2025-05-03
PHP中dirname(__FILE__)的意思
2025-05-03
PHP中extract()函数的妙用
2025-05-03
PHP中implode()和explode()
2025-05-03
PHP中serialize和json序列化与反序列化的区别
2025-05-03
Redis事务处理
2025-05-03
php中使用ajax进行前后端json数据交互
2025-05-03
Redis事务和锁操作
2025-05-03
PHP中如何得到数组的长度
2025-05-03
php中引入文件几种方式的区别
2025-05-03
PHP中把stdClass Object转array的几个方法
2025-05-03
PHP中替换换行符
2025-05-03
PHP中有关正则表达式的函数集锦
2023-02-28
Redis 集群搭建详细指南
2023-02-28
php中的cookie用法
2023-02-28
php中的session用法
2023-02-28
php中级联,php实现三级级联下拉框_PHP
2023-02-28
PHP中获取星期的几种方法
2023-02-28
Redis 限速器及问题
2023-03-01
php中高级基础知识点
2023-03-01