长度最小的子数组

我们先来看题目描述:

给定一个含有 n 个正整数的数组和一个正整数 s , 找出该数组中满足其和**≥ s** 的长度最小的连续子数组**。**如果不存在符合条件的连续子数组,返回 0。

示例:

复制代码
输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。

进阶:

如果你已经完成了O (n ) 时间复杂度的解法, 请尝试 O (n logn) 时间复杂度的解法。

解决方案

方法 1:暴力

想法

C++ 实现

复制代码
int minSubArrayLen(int s, vector<int>& nums)
{
    int n = nums.size();
    int ans = INT_MAX;
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            int sum = 0;
            for (int k = i; k <= j; k++) {
                sum += nums[k];
            }
            if (sum >= s) {
                ans = min(ans, (j - i + 1));
                break; //Found the smallest subarray with sum>=s starting with index i, hence move to next index
            }
        }
    }
    return (ans != INT_MAX) ? ans : 0;
}