Leetcode 2958. Length of Longest Subarray With at Most K Frequency

  • [Leetcode 2958. Length of Longest Subarray With at Most K Frequency](#Leetcode 2958. Length of Longest Subarray With at Most K Frequency)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题思路上其实也很简单,就是一个滑动窗口的思路,遍历窗口的左边界,平移获得使得其内部字符的frequency不超过k的最大右边界,然后取各个窗口长度的最大值即可。

显然左右边界都是单调的,因此整体算法复杂度就是 O ( N ) O(N) O(N)。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def maxSubarrayLength(self, nums: List[int], k: int) -> int:
        i, j, n = 0, 0, len(nums)
        cnt = defaultdict(int)
        ans = 0
        while j < n:
            x = nums[j]
            cnt[x] += 1
            j += 1
            while cnt[x] > k:
                cnt[nums[i]] -= 1
                i += 1
            ans = max(ans, j-i)
        return ans

提交代码评测得到:耗时1272ms,占用内存31.2MB。

相关推荐
Espresso Macchiato10 小时前
Leetcode 3523. Make Array Non-decreasing
leetcode··leetcode medium·leetcode 3523·leetcode周赛446
Y1nhl11 天前
基础算法:滑动窗口_python版本
开发语言·python·算法·力扣·滑动窗口
漫谈网络12 天前
智能资源管理机制-重传机制
网络·滑动窗口·sdn·数据通信·重传
_extraordinary_15 天前
笔试专题(六)
算法·哈希算法·贪心·模拟·滑动窗口·构造
Repeat71518 天前
日志统计(双指针)
java·数据结构·算法·蓝桥杯·双指针·滑动窗口
破东风19 天前
leetcode每日一题:替换子串得到平衡字符串
算法·leetcode·滑动窗口
ゞ 正在缓冲99%…21 天前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口
f狐0狸x1 个月前
【蓝桥杯每日一题】3.28
c语言·数据结构·c++·蓝桥杯·滑动窗口
ゞ 正在缓冲99%…1 个月前
leetcode3.无重复字符的最长字串
算法·leetcode·滑动窗口
小卡皮巴拉1 个月前
【力扣刷题实战】无重复的最长字串
开发语言·c++·算法·leetcode·滑动窗口