leetcode - 2461. Maximum Sum of Distinct Subarrays With Length K

Description

You are given an integer array nums and an integer k. Find the maximum subarray sum of all the subarrays of nums that meet the following conditions:

复制代码
The length of the subarray is k, and
All the elements of the subarray are distinct.
Return the maximum subarray sum of all the subarrays that meet the conditions. If no subarray meets the conditions, return 0.

A subarray is a contiguous non-empty sequence of elements within an array.

Example 1:

复制代码
Input: nums = [1,5,4,2,9,9,9], k = 3
Output: 15
Explanation: The subarrays of nums with length 3 are:
- [1,5,4] which meets the requirements and has a sum of 10.
- [5,4,2] which meets the requirements and has a sum of 11.
- [4,2,9] which meets the requirements and has a sum of 15.
- [2,9,9] which does not meet the requirements because the element 9 is repeated.
- [9,9,9] which does not meet the requirements because the element 9 is repeated.
We return 15 because it is the maximum subarray sum of all the subarrays that meet the conditions

Example 2:

复制代码
Input: nums = [4,4,4], k = 3
Output: 0
Explanation: The subarrays of nums with length 3 are:
- [4,4,4] which does not meet the requirements because the element 4 is repeated.
We return 0 because no subarrays meet the conditions.

Constraints:

复制代码
1 <= k <= nums.length <= 10^5
1 <= nums[i] <= 10^5

Solution

Sliding window (TLE)

Use a sliding window to store all the elements we have visited. When the current element is in the sliding window, pop from left until it doesn't exist.

Time complexity: o ( n 2 ) o(n^2) o(n2)

Space complexity: o ( n ) o(n) o(n)

Sliding window + set

Previous solution will exceed the time limit because list's in has o ( n ) o(n) o(n) complexity. To mitigate this, we could use an additional set to store all the elements.

Time complexity: o ( n ) o(n) o(n)

Space complexity: o ( n ) o(n) o(n)

Code

Sliding window (TLE)

python3 复制代码
class Solution:
    def maximumSubarraySum(self, nums: List[int], k: int) -> int:
        sliding_window = collections.deque([])
        cur_sum = 0
        max_sum = 0
        for each_num in nums:
            while each_num in sliding_window or len(sliding_window) == k:
                pop_ele = sliding_window.popleft()
                cur_sum -= pop_ele
            cur_sum += each_num
            sliding_window.append(each_num)
            if len(sliding_window) == k:
                max_sum = max(max_sum, cur_sum)
        return max_sum

Sliding window + set

python3 复制代码
class Solution:
    def maximumSubarraySum(self, nums: List[int], k: int) -> int:
        sliding_window = collections.deque([])
        window_ele = set()
        cur_sum = 0
        max_sum = 0
        for each_num in nums:
            while each_num in window_ele or len(sliding_window) == k:
                pop_ele = sliding_window.popleft()
                window_ele.remove(pop_ele)
                cur_sum -= pop_ele
            cur_sum += each_num
            sliding_window.append(each_num)
            window_ele.add(each_num)
            if len(sliding_window) == k:
                max_sum = max(max_sum, cur_sum)
        return max_sum
相关推荐
CoovallyAIHub8 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub8 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub9 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
有意义11 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub12 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户7268761033712 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect12 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
xlp666hub1 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
ZhengEnCi1 天前
08c. 检索算法与策略-混合检索
后端·python·算法