受标签影响的最大值

news/2025/3/13 4:05:42/

题目描述

我们有一个 n 项的集合。给出两个整数数组 values 和 labels ,第 i 个元素的值和标签分别是 values[i] 和 labels[i]。还会给出两个整数 numWanted 和 useLimit 。

从 n 个元素中选择一个子集 s :

子集 s 的大小 小于或等于 numWanted 。
s 中 最多 有相同标签的 useLimit 项。
一个子集的 分数 是该子集的值之和。

返回子集 s 的最大 分数 。

示例 1:

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

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

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

提示:

n == values.length == labels.length
1 <= n <= 2 * 104
0 <= values[i], labels[i] <= 2 * 104
1 <= numWanted, useLimit <= n

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-values-from-labels
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

对于useLimit,我们可以用hashmap将标签相同的元素存入一个list集合中,然后对集合进行排序,选取前useLimit个数加入最终进行选取的list中。
然后将最终的list进行排序选取前numWanted个数求和返回即可。

代码

class Solution {public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) {HashMap<Integer,List<Integer>> map=new HashMap<>();int n=values.length;for(int i=0;i<n;i++){if(map.containsKey(labels[i])==false){List<Integer> list=new ArrayList<>();list.add(values[i]);map.put(labels[i],list);}else{map.get(labels[i]).add(values[i]);}}List<Integer> li=new ArrayList<>();for(int k:map.keySet()){List<Integer> list1=map.get(k);Collections.sort(list1, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});for(int j=0;j<list1.size() && j<useLimit;j++){li.add(list1.get(j));}}Collections.sort(li, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});int res=0;for(int u=0;u<numWanted && u<li.size();u++){res+=li.get(u);}return res;}
}

http://www.ppmy.cn/news/89726.html

相关文章

springboot+vue4S店车辆管理系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的4S店车辆管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

商场里的导购图怎么制作?在商场内怎么导航?

在商场内怎么导航&#xff1f;很多顾客在逛商场的时候会先看商场的导览图&#xff0c;寻找自己心仪品牌的位置。有的商场导览图上会标注商铺号&#xff0c;在几层的几号铺位&#xff0c;然后按照品牌对应的编号去找店&#xff0c;方便、快捷&#xff0c;不然真的很容易迷路。 …

vue组件之间的通信都有哪些?

vue组件之间的通信都有哪些&#xff1f; 父子组件通信&#xff1a; Props&#xff1a;父组件通过props将数据传递给子组件&#xff0c;子组件通过props接收父组件传递的数据。Events&#xff1a;子组件通过$emit触发事件&#xff0c;并将数据传递给父组件&#xff0c;父组件通…

Python地理空间分析快速入门

地理空间数据描述了地球表面上的任何物体或特征。 常见的例子包括&#xff1a; 品牌应该在哪里开设下一家门店&#xff1f;天气如何影响区域销售&#xff1f;乘车的最佳路线是什么&#xff1f;哪个地区受飓风影响最严重&#xff1f;冰盖融化与碳排放有何关系&#xff1f;哪些地…

原子类的说明与使用

原子类的说明与使用 原子类是一种用于指定元素样式的基础类&#xff0c;它们只有一个属性&#xff1a;display: inline-block;&#xff0c;并且不包含任何内边距(padding)和外边距(margin)。原子类非常适合于构建重复使用的组件和样式。使用原子类可以提高样式的可复用性和可维…

vue 3 第二十七章:样式(动态class、动态style)

文章目录 动态 class动态 style 在 Vue 中&#xff0c;我们可以使用动态绑定语法来动态地添加类名或样式。本章将介绍 Vue 3 中如何使用动态绑定语法来动态地添加类名或样式。 动态 class 在 Vue 中&#xff0c;我们可以使用 :class 或 v-bind:class 指令来动态地添加类名。例…

C++中std::remove_reference

std::remove_reference是C标准库 <type_traits> 头文件中的一个类型萃取工具&#xff0c;用于从一个类型中移除引用&#xff08;Reference&#xff09;特性。它返回一个新的类型&#xff0c;该类型是从原始类型中移除了引用特性后得到的。 具体来说&#xff0c;如果输入…

国内做校园信息化的龙头企业公司有哪些?

随着数字化转型的加速&#xff0c;越来越多的学校开始寻求校园信息化的解决方案&#xff0c;相比于传统信息化模式&#xff0c;国内有哪些做校园信息化做得比较好的企业&#xff1f;他们采用的又是什么样的方式&#xff1f; 一文带你了解&#xff0c;零代码平台搭建校园信息化…