当前位置: 首页 > news >正文

记2831.找出最长等值子数组 练习理解

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。

如果子数组中所有元素都相等,则认为子数组是一个 等值子数组 。注意,空数组是 等值子数组 。

从 nums 中删除最多 k 个元素后,返回可能的最长等值子数组的长度。

子数组 是数组中一个连续且可能为空的元素序列。

思路:

题目意思是去找最大相同元素的数组,可以去找数组内可存在最多k个不同数字的子数组。而要去实现这一操作可以暴力枚举每一个存在的数可以存在最长的数组长度但时间复杂度相对大。

优化一下:可以用哈希表和滑窗共同解决,先用哈希表去找到所有数字出现的位置(在列表中的索引),一般是去找值的位置,而这道题需要统计同一个数字出现的索引位置,然后利用滑窗的办法去遍历每个数字所出现的索引位置(利用所有相同位置的索引位置的差就j[right]-j[left]代表此时数组间有多少元素,再去减去此数组1的个数right-left即为可删去的k的多少

from typing import List
from collections import defaultdict
class Solution:def longestEqualSubarray(self, nums: List[int], k: int) -> int:max_len=0pos=defaultdict(list)for i , char in enumerate(nums):pos[char].append(i)for j in pos.values():left=0for right in range(len(j)):count=j[right]-j[left]-(right-left)while count>k:left+=1count=j[right]-j[left]-(right-left)max_len=max(max_len,right-left+1)return max_len

举个例子就可以更好的理解:

nums = [1,2,1,1,3,3]中数字 1 的位置列表[0,2,3]为例:

  1. 初始状态:left=0,right 从 0 开始遍历

    • right=0(位置 0):
      • 总长度 = 0-0+1=1,x 的数量 = 1
      • 需要删除 = 1-1=0 ≤ k=2,窗口有效
      • 窗口长度 = 1,max_len=1
  2. right=1(位置 2):

    • 总长度 = 2-0+1=3,x 的数量 = 2
    • 需要删除 = 3-2=1 ≤ k=2,窗口有效
    • 窗口长度 = 2,max_len=2
  3. right=2(位置 3):

    • 总长度 = 3-0+1=4,x 的数量 = 3
    • 需要删除 = 4-3=1 ≤ k=2,窗口有效
    • 窗口长度 = 3,max_len=3

当需要删除的元素超过 k 时

假设k=0(不允许删除元素),处理positions = [0,2,3]

  • right=2(位置 3)时:
    • 需要删除 = 4-3=1 > k=0,窗口无效
    • 移动 left 到 1,此时窗口为 [1,2]
    • 重新计算:总长度 = 3-2+1=2,x 的数量 = 2
    • 需要删除 = 2-2=0 ≤ 0,窗口有效
    • 窗口长度 = 2

总结窗口移动规则

  1. 右指针 right:依次遍历每个位置,扩大窗口范围
  2. 左指针 left:当窗口需要删除的元素超过 k 时,右移 left 缩小窗口
  3. 有效性保证:每次 right 移动后,都通过调整 left 确保窗口有效
  4. 长度更新:在窗口有效后,立即用当前窗口长度更新 max_len

难点:理解更新思路以及滑窗更新判断依据

  1. 将问题转化为位置列表处理

    • 难点:直接在原始数组上滑动窗口操作难以高效计算需要删除的元素
    • 解决思路:先记录每个数字的所有出现位置,将问题转化为对每个位置列表的处理,简化了计算
  2. 计算需要删除的元素数量

    • 难点:如何快速计算窗口中需要删除的元素(非目标数字)
    • 关键公式:需要删除的元素 = 窗口覆盖的总长度 - 目标数字的数量
    • 具体计算:positions[right] - positions[left] + 1 - (right - left + 1)
http://www.dtcms.com/a/407444.html

相关文章:

  • 优秀网站作品下载免费广告设计模板网站
  • 住房和城乡建设部官方网站发布郑州发布会最新消息
  • 中国建站公司重庆装修公司网站建设
  • 怎样建网站域名公司建网站多少钱合适
  • 学习峰岹MOTORSIM(Day4)——电机磁铁变弱,转速反而飙升?
  • 网页搜索记录怎么删除神马seo服务
  • interface g0/0/0.1 概念及题目
  • 网站首页引导页 模版银行官网登录入口
  • 网站运营代理淘宝网站建设违规吗
  • 基于岗课赛证的中职物联网专业“综合布线课程”教学解决方案
  • 连接蓝牙时“无媒体信号”怎么办?
  • Java后端面经(八股——Redis)
  • 津做网站百度公司在哪里
  • 运用.net做网站做网站不知道做什么内容的
  • 4、除了常见的 services(业务微服务)和 gateway(API 网关)模块外,还必须建立一系列支撑性、平台级、基础设施类模块
  • 十堰的网站建设网站资料库建设的功能需求
  • 国家企业信用网查询系统杭州网站建设优化
  • ApplicationContext接口实现(二)
  • BMAD方法论:敏捷价值、原则映射与全生命周期技术
  • 龙游网站建设专业网站建设代理
  • 《道德经》第一章
  • dinov3 foreground_segmentation.ipynb魔改py ,不走torch.hub 训练
  • 广饶县住房和城乡建设局网站系统下载 网站 源码
  • 重庆建站塔山双喜烟台网站设计制作公司电话
  • 杭州网站制作报价移动网站建站视频
  • 如何进行网站改版设计大型网站开发实战
  • 【C++】深入理解string类(1)
  • 浙江省建设厅官方网站移动互联网应用程序个人信息保护管理暂行规定(征求意见稿)
  • 兖州中材建设有限公司网站苏州的网络公司网站建设
  • 26X00.6588_GE_RELEASE_SVC_IM.250918-1932_CLIENT_IOT_LTSC_OEM_X64FRE_ZH-CN.iso