zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    cf B. Number Busters
    hdu 5072 Coprime
    HDOJ迷宫城堡(判断强连通 tarjan算法)
    Entropy (huffman) 优先队列)
    Number Sequence
    Code (组合数)
    Round Numbers (排列组合)
    Naive and Silly Muggles (计算几何)
    SDUT 最短路径(二维SPFA)
    Pearls DP
  • 原文地址:https://www.cnblogs.com/heyn1/p/11016654.html
Copyright © 2011-2022 走看看