贪心题目:受标签影响的最大值

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:受标签影响的最大值

出处:1090. 受标签影响的最大值

难度

5 级

题目描述

要求

有一个n \texttt{n}n项的集合。给定两个整数数组values \texttt{values}values和labels \texttt{labels}labels,第i \texttt{i}i个元素的值和标签分别是values[i] \texttt{values[i]}values[i]和labels[i] \texttt{labels[i]}labels[i]。另外给定两个整数numWanted \texttt{numWanted}numWanted和useLimit \texttt{useLimit}useLimit。

从n \texttt{n}n个元素中选择一个符合下列要求的子集s \texttt{s}s:

  • 子集s \texttt{s}s的大小小于或等于numWanted \texttt{numWanted}numWanted。
  • 子集s \texttt{s}s中的相同标签的元素最多有useLimit \texttt{useLimit}useLimit个。

一个子集的分数是该子集的值之和。

返回子集s \texttt{s}s的最大分数。

示例

示例 1:

输入:values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1 \texttt{values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1}values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1
输出:9 \texttt{9}9
解释:选出的子集是第一项、第三项和第五项。

示例 2:

输入:values = [5,4,3,2,1], labels = [1,3,3,3,2], numWanted = 3, useLimit = 2 \texttt{values = [5,4,3,2,1], labels = [1,3,3,3,2], numWanted = 3, useLimit = 2}values = [5,4,3,2,1], labels = [1,3,3,3,2], numWanted = 3, useLimit = 2
输出:12 \texttt{12}12
解释:选出的子集是第一项、第二项和第三项。

示例 3:

输入:values = [9,8,8,7,6], labels = [0,0,0,1,1], numWanted = 3, useLimit = 1 \texttt{values = [9,8,8,7,6], labels = [0,0,0,1,1], numWanted = 3, useLimit = 1}values = [9,8,8,7,6], labels = [0,0,0,1,1], numWanted = 3, useLimit = 1
输出:16 \texttt{16}16
解释:选出的子集是第一项和第四项。

数据范围

  • n = values.length = labels.length \texttt{n} = \texttt{values.length} = \texttt{labels.length}n=values.length=labels.length
  • 1 ≤ n ≤ 2 × 10 4 \texttt{1} \le \texttt{n} \le \texttt{2} \times \texttt{10}^\texttt{4}1≤n≤2×104
  • 0 ≤ values[i], labels[i] ≤ 2 × 10 4 \texttt{0} \le \texttt{values[i], labels[i]} \le \texttt{2} \times \texttt{10}^\texttt{4}0≤values[i], labels[i]≤2×104
  • 1 ≤ numWanted, useLimit ≤ n \texttt{1} \le \texttt{numWanted, useLimit} \le \texttt{n}1≤numWanted, useLimit≤n

解法

思路和算法

为了得到所选子集的最大分数,可以使用贪心策略。

由于所有的元素值都是非负整数,当子集的元素个数小于numWanted \textit{numWanted}numWanted时,在不违反规则的情况下将一个新元素加入子集之后,子集的分数一定会增加或不变,不可能减少,因此应该在不违反规则的情况下将尽可能多的元素加入子集。

如果没有相同标签的元素最多useLimit \textit{useLimit}useLimit个的限制,则应该选值最大的numWanted \textit{numWanted}numWanted个元素加入子集,此时子集的分数最大,如果将其中的任意元素换成更小的元素,则子集的分数不会增加,只会减少。在有标签限制的情况下,如果同一个标签的元素个数超过useLimit \textit{useLimit}useLimit,则不能选该标签的所有元素,根据贪心策略,在限定可选元素个数上限的情况下,应选值最大的元素,否则子集的分数不可能更大。

为了按照从大到小的顺序选取元素,同时保留每个元素对应的标签信息,需要创建二维数组记录元素值与标签,将二维数组按照元素值降序排序。遍历排序后的数组,使用哈希表记录每个标签下选取的元素个数,对于每个元素,得到元素的值与标签,执行如下操作。

  • 如果当前标签下选取的元素个数已经达到useLimit \textit{useLimit}useLimit,则跳过该元素。

  • 如果当前标签下选取的元素个数小于useLimit \textit{useLimit}useLimit,则选取当前元素,将元素值加到子集的分数,将当前标签下选取的元素个数加1 11,将numWanted \textit{numWanted}numWanted减1 11。

当遍历结束或者numWanted \textit{numWanted}numWanted减少到0 00时,结束操作,此时即可得到子集的最大分数。

代码

classSolution{publicintlargestValsFromLabels(int[]values,int[]labels,intnumWanted,intuseLimit){intmaxScore=0;intn=values.length;int[][]valuesLabels=newint[n][2];for(inti=0;i<n;i++){valuesLabels[i][0]=values[i];valuesLabels[i][1]=labels[i];}Arrays.sort(valuesLabels,(a,b)->b[0]-a[0]);Map<Integer,Integer>labelCounts=newHashMap<Integer,Integer>();for(inti=0;i<n&&numWanted>0;i++){intvalue=valuesLabels[i][0],label=valuesLabels[i][1];intcount=labelCounts.getOrDefault(label,0);if(count<useLimit){maxScore+=value;labelCounts.put(label,count+1);numWanted--;}}returnmaxScore;}}

复杂度分析

  • 时间复杂度:O ( n log ⁡ n ) O(n \log n)O(nlogn),其中n nn是数组values \textit{values}values和labels \textit{labels}labels的长度。创建二维数组需要O ( n ) O(n)O(n)的时间,排序需要O ( n log ⁡ n ) O(n \log n)O(nlogn)的时间,排序之后遍历二维数组需要O ( n ) O(n)O(n)的时间,因此时间复杂度是O ( n log ⁡ n ) O(n \log n)O(nlogn)。

  • 空间复杂度:O ( n ) O(n)O(n),其中n nn是数组values \textit{values}values和labels \textit{labels}labels的长度。二维数组和哈希表需要O ( n ) O(n)O(n)的空间。

相关新闻

【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
基于Python+MySQL的员工档案管理系统

基于Python+MySQL的员工档案管理系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
什么是GC

什么是GC

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →

最新新闻

不登录、不注册,如何免费完整破解所有国际版 Unity?UniHacker 快速上手指南

不登录、不注册,如何免费完整破解所有国际版 Unity?UniHacker 快速上手指南

不登录、不注册&#xff0c;如何免费完整破解所有国际版 Unity&#xff1f;UniHacker 快速上手指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker UniHacke…

2026/10/21 1:44:29 阅读更多 →
戴森球计划燃料棒蓝图选型:FactoryBluePrints 的 3 条生产链 + 导入排障指南

戴森球计划燃料棒蓝图选型:FactoryBluePrints 的 3 条生产链 + 导入排障指南

戴森球计划燃料棒蓝图选型&#xff1a;FactoryBluePrints 的 3 条生产链 导入排障指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints 是戴森球计划的工…

2026/10/21 1:44:29 阅读更多 →
Switch 游戏如何装进电脑:yuzu 模拟器完整指南

Switch 游戏如何装进电脑:yuzu 模拟器完整指南

Switch 游戏如何装进电脑&#xff1a;yuzu 模拟器完整指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是一款开源的任天堂 Switch 模拟器&#xff0c;能把 NSP、XCI 等 Switch 游戏文件装进电脑真正跑起来…

2026/10/21 1:44:29 阅读更多 →
pytorch-metric-learning Testers 完整指南:从选型到训练闭环,一次讲透度量学习模型评估

pytorch-metric-learning Testers 完整指南:从选型到训练闭环,一次讲透度量学习模型评估

pytorch-metric-learning Testers 完整指南&#xff1a;从选型到训练闭环&#xff0c;一次讲透度量学习模型评估 【免费下载链接】ocp FAIR Chemistrys library of machine learning methods for chemistry 项目地址: https://gitcode.com/GitHub_Trending/oc/ocp pyto…

2026/10/21 1:44:29 阅读更多 →
gamdl 教程:如何用 3 条命令下载 Apple Music 的 ALAC 无损音乐

gamdl 教程:如何用 3 条命令下载 Apple Music 的 ALAC 无损音乐

gamdl 教程&#xff1a;如何用 3 条命令下载 Apple Music 的 ALAC 无损音乐 【免费下载链接】gamdl A command-line app for downloading Apple Music songs, music videos and post videos. 项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl Apple Music 的普通…

2026/10/21 1:44:29 阅读更多 →
douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载

douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载

douyin-downloader 教程&#xff1a;从扫码登录到抖音主页作品批量去水印下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fal…

2026/10/21 1:43:29 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →