209 Minimum Size Subarray Sum

本文介绍了一种使用滑动窗口算法解决寻找给定数组中满足和大于等于特定值的最短连续子数组问题的方法。通过调整左右边界,有效计算最小子数组长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

 

分析:

题目给定一个正数数组,及正数s,需要寻找连续子数组之和大于等s的最短长度。这里可以采用滑动窗口的思想进行求解。设两个索引l、r,计算[l,r]区间内元素之和,若元素之和小于s,则r++增加连续子数组内的元素个数,反之l++,减少连续子数组内元素个数,进而使得连续子数组内元素之和减小。若连续子数组元素和大于等于s,则记录当前连续子数组长度与原记录值得最小值(该值初始化为nums.size()+1)

代码:

class Solution {
public:
	int minSubArrayLen(int s, vector<int>& nums) {
		int l = 0;
		int r = -1;
		int res = nums.size() + 1;
		int sum = 0;
		while(l < nums.size())
		{
			if (r+1 < nums.size() && sum < s)
			{
				sum += nums[++r];
			}
			else
			{
				sum -= nums[l++];
			}
			if (sum >= s)
			{
				res = min(res, r - l + 1);
			}
		}

		if (res == nums.size() + 1)
			return 0;
		return res;

	}
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiang_Tree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值