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
相关推荐
CUMT_DJ1 小时前
matlab计算算法的运行时间
开发语言·算法·matlab
KyollBM4 小时前
每日羊题 (质数筛 + 数学 | 构造 + 位运算)
开发语言·c++·算法
Univin6 小时前
C++(10.5)
开发语言·c++·算法
躬身入世,以生证道6 小时前
面试技术栈 —— 简历篇
面试·职场和发展
Asmalin6 小时前
【代码随想录day 35】 力扣 01背包问题 一维
算法·leetcode·职场和发展
剪一朵云爱着6 小时前
力扣2779. 数组的最大美丽值
算法·leetcode·排序算法
qq_428639616 小时前
虚幻基础:组件间的联动方式
c++·算法·虚幻
深瞳智检7 小时前
YOLO算法原理详解系列 第002期-YOLOv2 算法原理详解
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
tao3556677 小时前
【Python刷力扣hot100】283. Move Zeroes
开发语言·python·leetcode
怎么没有名字注册了啊7 小时前
C++后台进程
java·c++·算法