2461.长度为K子数组中的最大和

给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和:

返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。

子数组 是数组中一段连续非空的元素序列。

示例 1:

**输入:**nums = [1,5,4,2,9,9,9], k = 3
**输出:**15
**解释:**nums 中长度为 3 的子数组是:

示例 2:

**输入:**nums = [4,4,4], k = 3
**输出:**0
**解释:**nums 中长度为 3 的子数组是:

提示:


  1. 入:下标为$i$的元素进入窗口,若$i<k-1$,重复第一步;
  2. 以数组元素为下标,使该下标对应哈希表的值+1。检查哈希表元素个数是否等于k。若是则更新最大和;
  3. 出,下标为$i-k+1$的元素离开窗口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Solution {

public:

    long long maximumSubarraySum(vector<int>& nums, int k) {

        long long sum=0,max_sum=0;

        int i=0,flag=0;

        unordered_map<int,int> cnt;

        for(i;i<nums.size();i++)

        {

            cnt[nums[i]]++;

            sum+=nums[i];

            if(i<k-1) continue;

            if(cnt.size() == k)

            {

                max_sum = max(max_sum,sum);

            }

            sum -= nums[i-k+1];

            if(--cnt[nums[i-k+1]] == 0) cnt.erase(nums[i-k+1]);

        }

        return max_sum;

    }

};

上次更新 2025-04-04