LeetCode-209 Minimum Size Subarray Sum

Posted heyn1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-209 Minimum Size Subarray Sum相关的知识,希望对你有一定的参考价值。

题目描述

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,求符合条件的最小子数组中的元素个数,如果不存在该子数组,则返回0 。

 

示例

E

Input: s = 7, nums = [2,3,1,2,4,3]
Output: 2

 

解题思路

先遍历一遍数组,保存数组中的前缀数字之和(presum[i]:代表0~i的数字之和)。再利用两个指针前后相互移动来查找符合条件的最小的指针之间的差值,也就是两个指针的最小距离。

 

复杂度分析

时间复杂度:O(n)

空间复杂度:O(n)

 

代码

class Solution 
public:
    int minSubArrayLen(int s, vector<int>& nums) 
        int n = nums.size();
        vector<int> presum(n + 1, 0);
        
        int res = INT_MAX;
        for(int i = 1, j = 0; i <= n; i++) 
            //保存0~i的数字之和
            presum[i] = presum[i - 1] + nums[i - 1];
            //若i~j的数字之和>=s,则递增j来搜寻最小的距离
            if(presum[i] - presum[j] >= s) 
                while(j < i && presum[i] - presum[j] >= s) 
                    res = min(res, i - j);
                    ++j;
                
            
            else 
                continue;
            
        
        //若没找到符合条件的子数组,则返回0
        if(res == INT_MAX)
            res = 0;
        
        return res;
    
;

 

以上是关于LeetCode-209 Minimum Size Subarray Sum的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 209: Minimum Size Subarray Sum

leetcode 209. Minimum Size Subarray Sum

刷题-LeetCode209. Minimum Size Subarray Sum

LeetCode-209.Minimum Size Subarray Sum

LeetCode-209 Minimum Size Subarray Sum

LeetCode 209. Minimum Size Subarray Sum