LeetCode 209题:如何找到和最小的连续子数组长度?
- 内容介绍
- 文章标签
- 相关推荐
本文共计463个文字,预计阅读时间需要2分钟。
题目描述:给定一个包含n个正整数的数组和一个正整数target。找出该数组中满足和等于target的最短连续子数组,并返回子数组的起始和结束索引。
具体步骤:
1.初始化一个窗口(start和end)来遍历数组,同时使用变量sum来记录窗口内数字的和。
2.如果当前窗口内的和大于等于target,则尝试缩小窗口的起始位置,直到窗口内的和小于target。
3.如果当前窗口内的和小于target,则扩大窗口的结束位置。
4.在每次窗口调整后,更新记录最短连续子数组起始和结束索引的信息。
5.重复步骤2和3,直到遍历完整个数组。
6.返回记录的最短连续子数组的起始和结束索引。
题目描述:
给定一个含有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分钟。
题目描述:给定一个包含n个正整数的数组和一个正整数target。找出该数组中满足和等于target的最短连续子数组,并返回子数组的起始和结束索引。
具体步骤:
1.初始化一个窗口(start和end)来遍历数组,同时使用变量sum来记录窗口内数字的和。
2.如果当前窗口内的和大于等于target,则尝试缩小窗口的起始位置,直到窗口内的和小于target。
3.如果当前窗口内的和小于target,则扩大窗口的结束位置。
4.在每次窗口调整后,更新记录最短连续子数组起始和结束索引的信息。
5.重复步骤2和3,直到遍历完整个数组。
6.返回记录的最短连续子数组的起始和结束索引。
题目描述:
给定一个含有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; //通过三目运算符来进行比较
}
}

