LeetCode 209题:如何找到和最小的连续子数组长度?

2026-05-27 21:311阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计463个文字,预计阅读时间需要2分钟。

LeetCode 209题:如何找到和最小的连续子数组长度?

题目描述:给定一个包含n个正整数的数组和一个正整数target。找出该数组中满足和等于target的最短连续子数组,并返回子数组的起始和结束索引。

具体步骤:

1.初始化一个窗口(start和end)来遍历数组,同时使用变量sum来记录窗口内数字的和。

2.如果当前窗口内的和大于等于target,则尝试缩小窗口的起始位置,直到窗口内的和小于target。

3.如果当前窗口内的和小于target,则扩大窗口的结束位置。

4.在每次窗口调整后,更新记录最短连续子数组起始和结束索引的信息。

5.重复步骤2和3,直到遍历完整个数组。

6.返回记录的最短连续子数组的起始和结束索引。

题目描述:

LeetCode 209题:如何找到和最小的连续子数组长度?

给定一个含有​​n​​个正整数的数组和一个正整数​​target​​。

找出该数组中满足其和​​≥ target​​的长度最小的连续子数组​​[numsl, numsl+1, ..., numsr-1, numsr]​​,并返回其长度。如果不存在符合条件的子数组,返回​​0​​。

分析:

方法一:暴力解决法(双层循环)

方法二:滑动窗口法

代码实现:

class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left=0;
int sum=0;
int result=Integer.MAX_VALUE; //表示的是整型最大值
for(int right=0;right<nums.length;right++){
sum+=nums[right]; //右指针移动求和
while(sum>=target){
result=Math.min(result,right-left+1); //调用Math库中的比较大小的函数
sum-=nums[left++]; //左指针移动
}
}
return result==Integer.MAX_VALUE?0:result; //通过三目运算符来进行比较
}
}

本文共计463个文字,预计阅读时间需要2分钟。

LeetCode 209题:如何找到和最小的连续子数组长度?

题目描述:给定一个包含n个正整数的数组和一个正整数target。找出该数组中满足和等于target的最短连续子数组,并返回子数组的起始和结束索引。

具体步骤:

1.初始化一个窗口(start和end)来遍历数组,同时使用变量sum来记录窗口内数字的和。

2.如果当前窗口内的和大于等于target,则尝试缩小窗口的起始位置,直到窗口内的和小于target。

3.如果当前窗口内的和小于target,则扩大窗口的结束位置。

4.在每次窗口调整后,更新记录最短连续子数组起始和结束索引的信息。

5.重复步骤2和3,直到遍历完整个数组。

6.返回记录的最短连续子数组的起始和结束索引。

题目描述:

LeetCode 209题:如何找到和最小的连续子数组长度?

给定一个含有​​n​​个正整数的数组和一个正整数​​target​​。

找出该数组中满足其和​​≥ target​​的长度最小的连续子数组​​[numsl, numsl+1, ..., numsr-1, numsr]​​,并返回其长度。如果不存在符合条件的子数组,返回​​0​​。

分析:

方法一:暴力解决法(双层循环)

方法二:滑动窗口法

代码实现:

class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left=0;
int sum=0;
int result=Integer.MAX_VALUE; //表示的是整型最大值
for(int right=0;right<nums.length;right++){
sum+=nums[right]; //右指针移动求和
while(sum>=target){
result=Math.min(result,right-left+1); //调用Math库中的比较大小的函数
sum-=nums[left++]; //左指针移动
}
}
return result==Integer.MAX_VALUE?0:result; //通过三目运算符来进行比较
}
}