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
相关推荐
痴儿哈哈18 小时前
C++与硬件交互编程
开发语言·c++·算法
小O的算法实验室18 小时前
2024年ESWA SCI1区TOP,异构无人机配送问题的集成多目标优化方法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
草履虫建模19 小时前
力扣算法 121. 买卖股票的最佳时机
算法·leetcode·职场和发展·贪心算法·动态规划·一次遍历
养军博客19 小时前
C语言五天速成(可用于蓝桥杯备考 难度中等偏下)
c语言·算法·蓝桥杯
爱尔兰极光19 小时前
LeetCode--有序数组的平方
算法·leetcode·职场和发展
jay神19 小时前
森林火灾检测数据集
算法·机器学习·目标跟踪
80530单词突击赢19 小时前
STLVector底层原理与高效运用
数据结构·算法
haluhalu.19 小时前
LeetCode---基础算法刷题指南
数据结构·算法·leetcode
iAkuya19 小时前
(leetcode)力扣100 58组合总和(回溯)
算法·leetcode·职场和发展
80530单词突击赢19 小时前
C++关联容器深度解析:set/map全攻略
java·数据结构·算法