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
相关推荐
生成论实验室13 分钟前
生成态势猜想:一种统一的宇宙动力学语法
人工智能·科技·神经网络·算法·信息与通信
旖-旎39 分钟前
深搜(二叉树的所有路径)(6)
c++·算法·leetcode·深度优先·递归
啦啦啦_99991 小时前
3. KNN算法之 常用的距离度量方式(欧式&曼哈顿&切比雪夫&闵式距离)
算法
朝风工作室1 小时前
实时全景拼接|支持任意路数输入,8*8K RTX3050 实测 10ms 内
图像处理·算法·计算机视觉
nianniannnn2 小时前
HNU计算机系统期中题库详解(五)位运算与逻辑运算
算法·位运算·计算机系统
AC赳赳老秦2 小时前
OpenClaw实战案例:用Agent实现每日工作日报自动生成+发送
人工智能·python·职场和发展·eclipse·github·deepseek·openclaw
徐新帅2 小时前
4181:【GESP2603七级】拆分
c++·学习·算法·信奥赛
haina20192 小时前
海纳AI正式发布“面试Agent”——实现千岗千面与人机共管的智面新纪元
人工智能·面试·职场和发展
黎梨梨梨_2 小时前
C++入门基础(下)(重载,引用,inline,nullptr)
开发语言·c++·算法
Jasmine_llq2 小时前
《B4411 [GESP202509 二级] 优美的数字》
算法·暴力枚举算法·逐位校验算法·统一数位判断算法·条件计数算法·自定义函数判断算法