【每日一题】LeetCode 2841.几乎唯一子数组的最大和(数组、哈希、滑动窗口)

news2025/1/15 16:17:17

【每日一题】LeetCode 2841.几乎唯一子数组的最大和(数组、哈希、滑动窗口)

题目描述

给定一个整数数组 nums 和两个正整数 mk,任务是找出 nums 中长度为 k几乎唯一 子数组的最大和。如果不存在这样的子数组,则返回 0

几乎唯一子数组 定义为:子数组中至少有 m 个互不相同的元素。

子数组是指数组中一段连续非空的元素序列。

  • nums:一个整数数组。
  • m:一个正整数,表示至少有多少个互不相同的元素。
  • k:一个正整数,表示子数组的长度。

示例

示例 1

  • 输入:nums = [2,6,7,3,1,7], m = 3, k = 4
  • 输出:18
  • 解释:有三个长度为 4 的几乎唯一子数组 [2, 6, 7, 3][6, 7, 3, 1][7, 3, 1, 7]。其中和最大的是 [2, 6, 7, 3],和为 18

示例 2

  • 输入:nums = [5,9,9,2,4,5,4], m = 1, k = 3
  • 输出:23
  • 解释:有五个长度为 3 的几乎唯一子数组 [5, 9, 9][9, 9, 2][9, 2, 4][2, 4, 5][4, 5, 4]。其中和最大的是 [5, 9, 9],和为 23

示例 3

  • 输入:nums = [1,2,1,2,1,2,1], m = 3, k = 3
  • 输出:0
  • 解释:不存在长度为 3 的子数组含有至少 3 个互不相同元素的子数组,因此不存在几乎唯一子数组,最大和为 0

思路分析

要解决这个问题,我们可以使用滑动窗口的方法。首先,我们初始化一个窗口,使其包含数组的前 k 个元素。然后,我们检查这个窗口是否满足至少有 m 个互不相同的元素的条件。如果满足,我们就记录下这个窗口的和。接着,我们开始滑动窗口,每次向右移动一个元素,移除窗口最左边的元素,并添加一个新的元素到窗口的右边。在每次移动后,我们都需要更新窗口内元素的计数,并检查是否仍然满足条件。如果满足,我们就更新最大和。这个过程一直持续到窗口滑动到数组的末尾。

代码实现

import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Solution {
    public long maxSum(List<Integer> nums, int m, int k) {
        // 使用 HashMap 来存储窗口内元素的频率
        Map<Integer, Integer> hashMap = new HashMap<>();
        // 初始化最大和为 0
        long max = 0;
        // 初始化当前窗口的和
        long count = 0;

        // 填充第一个窗口
        for (int i = 0; i < k; i++) {
            int num = nums.get(i);
            hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
            count += num;
        }
        // 检查第一个窗口是否满足条件
        if (hashMap.size() >= m) {
            max = count;
        }

        // 开始滑动窗口
        for (int i = k; i < nums.size(); i++) {
            // 移除窗口最左边的元素
            int oldnum = nums.get(i - k);
            count -= oldnum;
            hashMap.put(oldnum, hashMap.get(oldnum) - 1);
            // 如果某个元素的计数变为 0,则从 HashMap 中移除
            if (hashMap.get(oldnum) == 0) {
                hashMap.remove(oldnum);
            }
            // 添加新元素到窗口
            int newnum = nums.get(i);
            hashMap.put(newnum, hashMap.getOrDefault(newnum, 0) + 1);
            count += newnum;
            // 检查当前窗口是否满足条件,并更新最大和
            if (hashMap.size() >= m) {
                max = Math.max(max, count);
            }
        }
        return max;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.第二阶段x86游戏实战2-CE加强修改移动速度(浮点数存放方式与转换)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

2.3.2 协程调度器实现与性能测试

LINUX 精通 8 day24 20240909 晚19&#xff1a;35 - 20: 47 课程链接地址 老师画图用的是excalidraw 可以在线 本地&#xff01; Excalidraw&#xff1a;开源实用的白板画图工具&#xff08;在线/本地安装&#xff09;-CSDN博客 2.3.2 协程调度器实现与性能测试 复习了上…

HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)

跟着该视频学习&#xff0c;记录笔记&#xff1a;【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day3 内容梳理&#xff1a;…

使用ChatGPT生成爆款小红书文案,有手就行!

小红书&#xff0c;作为当下热门的社交电商平台&#xff0c;以其独特的社区氛围、精准的用户画像和高粘性的互动模式&#xff0c;吸引了大量年轻用户&#xff0c;尤其是女性用户。平台上的内容风格多样&#xff0c;涵盖了美妆、时尚、生活方式等多个领域。 本文将介绍小红书平台…

为何家用无线路由器不能实现PROFINET通信?

家用无线路由器和工业通信设备到底有什么不同&#xff1f;工控人加入PLC工业自动化精英社群 首先&#xff0c;在技术上&#xff0c;两者存在明显的差异。 家用无线路由器主要是为了提供互联网接入和家庭设备间的连接&#xff0c;而PROFINET则是专为工业自动化设计的通信协议。就…

1分钟教你用AI制作美女热舞视频,收益可观,操作简单(附工具及教程资料)

美女跳舞&#xff0c;听着是不是就觉得会很哇塞&#xff1f; 不管是男的女的、老的少的都喜欢看&#xff0c;而且一般美女跳舞的账号涨粉都很快&#xff0c;势头都贼猛。 今天就给大家分享一个很热门的小副业——AI美女跳舞。 更多实操和AI绘画工具&#xff0c;可以扫描下方&…

通过SSH服务远程操作Linux(ubuntu)主机

首先SSH是什么&#xff1f;SSH&#xff08;Secure SHell&#xff09;是Linux、Unix、Mac及其他网络设备最常用的远程CLI管理协议&#xff0c;SSH使用秘钥对数据进行加密&#xff0c;保证了远程管理数据的安全性。Secure Shell (SSH) 是一种网络协议&#xff0c;允许用户通过加密…

OpenCV-轮廓特征

文章目录 一、简介1.意义2.类别 二、代码实现1.数据预处理2.计算周长3.绘制外接圆轮廓4.绘制外接矩阵 三、总结 一、简介 1.意义 在OpenCV中&#xff0c;轮廓检测后得到的轮廓不仅是一系列点的集合&#xff0c;还可以进一步分析以提取有用的特征。这些特征包括但不限于轮廓的…

纷享销客CRM+契约锁:“好应用+电子签” 融合领先实践

9月6日&#xff0c;主题为“智享未来 领创CRM新纪元”的2024纷享销客伙伴大会湖北站圆满结束&#xff0c;此次盛会吸引了来自不同行业的精英代表、技术专家&#xff0c;共同探讨CRM领域的最新趋势、创新实践与未来机遇。纷享销客战略伙伴契约锁受邀参加本次大会&#xff0c;为现…

一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention

一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention 目录 一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法…

NLP-新词挖掘

一、背景 网络领域的新词发现&#xff08;挖掘&#xff09;是一个非常重要的nlp课题。在处理文本对象时&#xff0c;非常关键的问题在于“切词”这个环节&#xff0c;几乎所有的后续结果都依赖第一步的切词。因此切词的准确性在很大程度上影响着后续的处理&#xff0c;切词结果…

树莓派通过串口驱动SU-03T语音模块

树莓派通过串口驱动SU-03T语音模块 文章目录 树莓派通过串口驱动SU-03T语音模块一、SU-03T语音模块的配置和烧录1.1 PIN引脚配置&#xff1a;1.2 设置唤醒词&#xff1a;1.3 设置控制详情&#xff1a;1.4 下载SDK并烧录到语音模块&#xff1a; 二、测试语音模块三、树莓派通过串…

在这12种场景下会使Spring事务失效--注意防范

在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同事写入多张表的数据&#xff0c;但为了保证操作的原子性&#xff08;要么同事插入数据成功&#xff0c;要么同事插入失败&#xff09;&#xff0c;例如&#xff0c;当我们创建用户的时候&#xff0c;往往会给用户…

图的广度优先遍历与深度优先遍历(C语言)

这是结果 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define _CRT_SECURE_NO_WARNINGS// 定义边表结点结构 typedef struct EdgeNode {int adjvex; // 邻接顶点域&#xff0c;存储该边所指向的顶点struct EdgeNode* next; // 指向下一条…

Oracle Linux 8.10安装Oracle19c(19.3.0)完整教程

安装前请仔细将文档通读一遍&#xff0c;安装过程中根据安装命令仔细核对&#xff0c;特别留意一些字体加粗或标红的字样&#xff0c;遇到问题请及时咨询公司 1、基础环境 1.1、操作系统 cat /etc/redhat-release 1.2、主机名 医院默认分配的主机名可能跟其他主机会有重复&a…

【阿里云】10分钟在网站上增加一个AI助手

文章目录 方案预览1. 创建大模型问答应用1.1 创建应用1.2 获取调用 API 所需的凭证 2. 搭建示例网站2.1 创建应用2.2 访问网站 3. 为网站增加 AI 助手3.1 增加 AI 助手相关代码3.2 验证网站上的 AI 助手 4. 为 AI 助手增加私有知识4.1 配置知识库 总结应用于生产环境前端代码服…

mysql使用笔记

1、下载mysql,本教程适用于免安装版。 https://dev.mysql.com/downloads/mysql/ 当前最新版本是8.0.27,如果想安装其他版本,选择Achives. 下载后减压到要放置的目录中。 E:\mysql-5.7.35-winx64 这是我的路径,在根目录下建立一个my.ini 文件,用来放置配置信息,保存的时候…

猫咪浮毛有这么严重?你不知道的浮毛清理好物——宠物空气净化器

家人们谁懂啊&#xff0c;男朋友整天和我家猫争宠&#xff0c;最近还上升到了有猫没他的地步。猫咪刚开始接回来的时候压根不掉毛&#xff0c;他们相处的特别好&#xff0c;呆在一起玩的时间比我还多。可是这样温馨的相处没持续多久就变了&#xff0c;之前不掉毛都是猫咪的假象…

MIST:用于组织病理学亚型预测的多实例选择性Transformer|文献速递--基于深度学习的医学影像病灶分割

Title 题目 MIST: Multi-instance selective transformer for histopathological subtype prediction MIST&#xff1a;用于组织病理学亚型预测的多实例选择性Transformer 01 文献速递介绍 组织病理学亚型预测在癌症疾病的诊断和治疗中具有重要的临床意义。组织病理学亚型…

反序列化漏洞练习1

根据代码可以看出来sis类只是接收了参数cmd&#xff0c;下边是通过get获得cmd的值&#xff0c;所以可以在序列化过程中直接为cmd赋值。 根据源码编写序列化代码 <?php class sis{public $cmdsystem("whoami");?>;public function __wakeup(){eval($this-&g…