长度最小的子数组
- 1. 题目解析
- 2. 讲解算法原理
- 3. 编写代码
1. 题目解析
题目地址:长度最小的子数组
2. 讲解算法原理
首先,定义变量n为数组nums的长度,sum为当前子数组的和,len为最短子数组的长度,初始值为INT_MAX(表示无穷大)。
使用两个指针left和right来表示滑动窗口的左右边界,初始时两个指针都指向数组的起始位置。
进入循环,循环条件为right小于数组长度n。在每次循环中,执行以下操作:
a. 将当前right指向的元素加到sum中,表示将该元素纳入窗口。
b. 进入一个while循环,判断sum是否大于等于目标值target。如果是,则表示当前窗口的和已经满足要求。
c. 在while循环中,更新最短子数组的长度len,取当前len和窗口的长度(right-left+1)中的较小值。
d. 将窗口左边界的元素从sum中减去,并将左边界向右移动一位。
循环结束后,返回最短子数组的长度len。如果len的值仍然是INT_MAX,说明不存在满足要求的子数组,返回0。
3. 编写代码
c服务器托管网lass Solution {
public:
int minSubArrayLen(int target, vectorint>&am服务器托管网p; nums) {
int n=nums.size(),sum=0,len=INT_MAX;
for (int left=0,right=0;rightn;right++)
{
sum+=nums[right];//进窗口
while(sum>=target)//判断
{
len=min(len,right-left+1);//更新
sum-=nums[left];//出窗口
left++;
}
}
return len==INT_MAX?0:len;
}
};
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net