LeetCode 2461. Maximum Sum of Distinct Subarrays With Length K

23 阅读1分钟

🔗 leetcode.com/problems/ma…

题目

  • 给定一个数组,和一个数字 k,求长度为 k 的连续子数组的和,要求子数组的元素都唯一
  • 求满足条件的子数组之和的最大值

思路

  • 窗口大小 k,滑动窗口,统计窗口内数字的出现频率

代码

class Solution {
public:
    long long maximumSubarraySum(vector<int>& nums, int k) {
        long long ans = 0, sum = 0;
        unordered_map<int, int> count_map;
        for (int i = 0; i < nums.size(); i++) {
            sum += nums[i];
            count_map[nums[i]]++;

            if (i >= k) {
                sum -= nums[i - k];
                count_map[nums[i - k]]--;
                if (count_map[nums[i - k]] == 0)
                    count_map.erase(nums[i - k]);
            }

            if (i >= k - 1) {
                if (count_map.size() == k)
                    ans = max(ans, sum);
            }
        }

        return ans;
    }
        
    };