2461.长度为K子数组中的最大和
链接:2461.长度为K子数组中的最大和
难度:Medium
标签:数组、哈希表、滑动窗口
简介:返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。
题解 1 - cpp
- 编辑时间:2022-11-06
- 执行用时:192ms
- 内存消耗:90.8MB
- 编程语言:cpp
- 解法介绍:滑动窗口遍历。
class Solution {
public:
    long long maximumSubarraySum(vector<int>& nums, int k) {
        long long sum = 0, ans = 0;
        int l = 0, r = 0, n = nums.size();
        int cnt = 0;
        unordered_map<int, int> m;
        while (r < k) {
            m[nums[r]]++;
            sum += nums[r];
            if (m[nums[r]] == 2) cnt++;
            r++;
        }
        if (cnt == 0) ans = sum;
        // cout << "l = " << l << ", r = " << r << endl;
        // cout << "sum = " << sum << ", cnt = " << cnt << endl;
        while (r < n) {
            sum -= nums[l];
            m[nums[l]]--;
            if (m[nums[l]] == 1) cnt--;
            l++;
            sum += nums[r];
            m[nums[r]]++;
            if (m[nums[r]] == 2) cnt++;
            r++;
            // cout << "l = " << l << ", r = " << r << endl;
            if (cnt == 0) ans = max(ans, sum);
        }
        return ans;
    }
};