• 難度分: 1546
  • 定長度的 sliding window,搭配對 window 檢查是否滿足條件
class Solution {
public:
    long long maxSum(vector<int>& nums, int m, int k) {
        int n = nums.size();
        unordered_map<int,int> cnt;
        long long sum = 0;
        long long res = 0;
        int valid = 0;
        for (int i = 0; i < k; i++) {
            sum += nums[i];
            if (cnt[nums[i]]++ == 0) valid++;
        }
        if (valid >= m) res = sum;
        for (int i = k; i < n; i++) {
            sum += (nums[i] - nums[i-k]);
            if (cnt[nums[i]]++ == 0) valid++;
            if (--cnt[nums[i-k]] == 0) valid--;
            if (valid >= m) res = max(res, sum);
        }
        return res;
    }
};