• 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;
        }
    };
  • 相关阅读:
    TERSUS笔记员工信息518Tersus数据库下拉菜单<Placeholder Text>默认值点击事件
    TERSUS笔记员工信息517Tersus数据库元件SQL语句传入相关问题总结
    010editor 注册分析[1]
    StartAllBack_3.3.5 记录
    pdb 符号路径
    win10 双机调试环境
    省选联考 2022 题解
    AtCoder Regular Contest 139
    AGC 营业记录
    AtCoder Grand Contest 029
  • 原文地址:https://www.cnblogs.com/heyn1/p/11016654.html
Copyright © 2020-2023  润新知