LeetCode1090. 受标签影响的最大值
问题:
我们有一个项的集合,其中第 i 项的值为 values[i],标签为 labels[i]。
我们从这些项中选出一个子集 S,这样一来:
|S| <= num_wanted- 对于任意的标签
L,子集S中标签为L的项的数目总满足<= use_limit。
返回子集 S 的最大可能的 和。
示例 1:
输入:values = [5,4,3,2,1], labels = [1,1,2,2,3],num_wanted= 3, use_limit = 1
输出:9
解释:选出的子集是第一项,第三项和第五项。
示例 2:
输入:values = [5,4,3,2,1], labels = [1,3,3,3,2],num_wanted= 3, use_limit = 2
输出:12
解释:选出的子集是第一项,第二项和第三项。
示例 3:
输入:values = [9,8,8,7,6], labels = [0,0,0,1,1],num_wanted= 3, use_limit = 1
输出:16
解释:选出的子集是第一项和第四项。
示例 4:
输入:values = [9,8,8,7,6], labels = [0,0,0,1,1],num_wanted= 3, use_limit = 2
输出:24
解释:选出的子集是第一项,第二项和第四项。
提示:
1 <= values.length == labels.length <= 200000 <= values[i], labels[i] <= 200001 <= num_wanted, use_limit <= values.length
链接:https://leetcode-cn.com/contest/weekly-contest-141/problems/largest-values-from-labels/
分析:
给出一个项的集合,选出子集,要求和的最大值,其中选出至多num_wanted个数字,并且同一标签的个数不超过use_limit。
可以将原始输出的数据按照label作为可以,重构为map数据,value按照值排序。
那么可以从每个lable中选出不超过use_limit个数据,构架一个vector,最终结果出自这个vector,将vector排序,选出最大的num_wanted个求和即可。
AC Code:
class Solution {
public:
int largestValsFromLabels(vector<int>& values, vector<int>& labels, int num_wanted, int use_limit) {
int ret = ;
map<int, vector<int> > alldata;
vector<int> opdata; for (int i = ; i < values.size(); i++)
{
alldata[labels[i]].emplace_back(values[i]);
}
for (map<int,vector<int> >::iterator it = alldata.begin(); it != alldata.end(); it++)
{
sort((*it).second.begin(), (*it).second.end());
reverse((*it).second.begin(), (*it).second.end());
int num = ;
for (int i = ; i < (*it).second.size() && i < use_limit; i++)
{
opdata.emplace_back((*it).second[i]);
}
}
sort(opdata.begin(), opdata.end());
reverse(opdata.begin(), opdata.end());
for (int i = ; i < num_wanted && i<opdata.size(); i++)
{
ret += opdata[i];
}
return ret;
}
};
其他:
1,第一code:
class Solution {
public int largestValsFromLabels(int[] values, int[] labels, int num_wanted, int use_limit) {
int n = values.length;
int[][] ai = new int[n][];
for(int i = ;i < n;i++){
ai[i] = new int[]{values[i], labels[i]};
}
Arrays.sort(ai, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
return a[] - b[];
}
});
int[] f = new int[];
int sum = ;
int used = ;
for(int i = n-;i >= ;i--){
if(used < num_wanted && ++f[ai[i][]] <= use_limit){
sum += ai[i][];
used++;
}
}
return sum;
}
}
第二C++代码:
class Solution {
public:
int largestValsFromLabels(vector<int>& values, vector<int>& labels, int num_wanted, int use_limit) {
vector< pair<int, int> > v;
for(int i = ; i < values.size() ; i++)
v.push_back({values[i], labels[i]});
sort(v.rbegin(), v.rend());
int lc[] = {};
int ans = ;
int cc = ;
for(int i = ; i < v.size() ; i++){
if( cc + > num_wanted ) continue;
int vv = v[i].first;
int ll = v[i].second;
if( lc[ll] + > use_limit ){
continue;
}
ans += vv;
lc[ll]++;
cc++;
}
return ans;
}
};
2 vector sort默认升序,如果想要降序需要编写自定义比较函数,可以sort后reverse。
LeetCode1090. 受标签影响的最大值的更多相关文章
- 如何固定table表格宽度,样式不受容器影响
之前有篇关于LODOP打印超文本表格,两个样式相同的表格,出现错位的情况.该博文地址:LODOP打印表格错位的几种情况该文试验了两种现象,第一种浏览器页面显示错位,打印预览也错位,第二种浏览器页面表格 ...
- OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)
在用OpenCV对图像进行处理时,利用颜色定位是常常会接触到的方法,但RGB受光照影响比较严重,转换到HSV XYZ等空间也解决不了时, 可以用白平衡算法进行修正,使其发黄.发蓝.发红的照片更加趋于自 ...
- bat性能效率受啥影响
代码效率的提升往往由算法决定,曾发过专贴(浅谈提高代码效率的编写习惯:http://tieba.baidu.com/p/1187281687),但是以实例为主,并没有太多的文字说明,现在归纳一下:影响 ...
- Linux nohup命令应用简介--让Linux的进程不受终端影响
nohup命令应用简介--让Linux的进程不受终端影响 by:授客 QQ:1033553122 #开启ping进程 [root@localhost ~]# ping localhost & ...
- 【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)
教程目录一 计时器简介二 计时器实现三 Demo下载 一 计时器简介在手机上跑游戏时,可能由于运动物体过多,导致帧频太低,计时不准确.比如一些倒计时的游戏,可能倒计时30s,变成了35s.比如ipho ...
- 抢滩5G,哪些行业将受最大影响?
抢滩5G,哪些行业将受最大影响? 中国工信部6月6日已正式向中国电信.中国移动.中国联通.中国广电发放5G商用牌照.中国成为继韩国.美国.瑞士.英国之后,第五个宣布5G商用的国家. 这次颁发牌照,比计 ...
- 通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)
通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二) 效果:默认一直隐藏导航栏,当滚动条滚到超过300px按钮出现,点击回 ...
- iOS开发小技巧--学会包装控件(有些view的位置由于代码或系统原因,位置或者尺寸不容易修改或者容易受外界影响)
一.百思项目中遇到了两处这样的问题, 第一处 - 是评论界面的headerView,由于直接把自己搞的xib加载了放在了那里,xib中setFrame写了好多-= +=,每次滚动的时候,会频繁调用x ...
- 让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素
如果设置了,display:inline-block;边框大小至少和行高一样.这样就可能比文字高.
随机推荐
- 02.Jquery Mobile介绍以及Jquery Mobile页面与对话框
一.为什么要学Jquery Mobile JqueryMobile 是jquery的移动版本,懂基本的jquery知识,会简单的html+css就可以完成很多复杂的功能,还有就是这个框架在企业中用 ...
- JS高级学习历程-10
[面向对象] 面向对象的三大特性:封装.继承.多态 封装:在“类”里边有关键字public.protected.private 对成员进行声明,这样每个成员的访问都会受到不同关键字的限制. 继承:在p ...
- Django之Form自定义验证规则
1.数据源无法时时更新,有两种方法 方式一:重构构造方法(推荐) 方法一:重构构造方法(推荐) class ClassesForm(Form): name = fields.CharField( re ...
- [TCP/IP]OSI七层模型和TCP/IP四层模型
OSI參考模型 在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式.修改或分享.為此,ISO(國際標準組織)發展出一套OSI參考模型(O ...
- Hive进阶_内置函数
Hive数学函数 round : 四舍五入 ceil : 向下取整 floor : 向上取整 ),),),),); Hive字符函数 select lower('Hello World'), uppe ...
- .net core实现的全程序跟踪
Ocelot中使用Butterfly实践 ocelot Ocelot + Consul实践 Ocelot中使用Butterfly实践 Ocelot监控 Ocelot统一权限验证 ...
- Typora--Draw Diagrams With Markdown
Typora Typora supports some Markdown extension for diagrams, you could enable this feature from pref ...
- fleet-运行一个全局的单元
运行一个全局的单元 正如前面所提到的,全局单元是有用的,用于在您的集群中的所有机器上运行一个单元.它不会比一个普通的单元差太多,而是一个新的x-fleet参数称为Global=true.这是一个示例单 ...
- Java学习知识体系大纲梳理
感悟 很奇怪,我怎么会想着写这么一篇博客——Java语言的学习体系,这不是大学就已经学过的课程嘛.博主系计算机科班毕业,大学的时候没少捧着Java教程来学习,不管是为了学习编程还是为了期末考个高分,都 ...
- 编译安装php容易出现的问题以及解决办法
http://crybit.com/20-common-php-compilation-errors-and-fix-unix/