问题:

我们有一个项的集合,其中第 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. 1 <= values.length == labels.length <= 20000
  2. 0 <= values[i], labels[i] <= 20000
  3. 1 <= 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. 受标签影响的最大值的更多相关文章

  1. 如何固定table表格宽度,样式不受容器影响

    之前有篇关于LODOP打印超文本表格,两个样式相同的表格,出现错位的情况.该博文地址:LODOP打印表格错位的几种情况该文试验了两种现象,第一种浏览器页面显示错位,打印预览也错位,第二种浏览器页面表格 ...

  2. OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)

    在用OpenCV对图像进行处理时,利用颜色定位是常常会接触到的方法,但RGB受光照影响比较严重,转换到HSV XYZ等空间也解决不了时, 可以用白平衡算法进行修正,使其发黄.发蓝.发红的照片更加趋于自 ...

  3. bat性能效率受啥影响

    代码效率的提升往往由算法决定,曾发过专贴(浅谈提高代码效率的编写习惯:http://tieba.baidu.com/p/1187281687),但是以实例为主,并没有太多的文字说明,现在归纳一下:影响 ...

  4. Linux nohup命令应用简介--让Linux的进程不受终端影响

    nohup命令应用简介--让Linux的进程不受终端影响 by:授客 QQ:1033553122   #开启ping进程 [root@localhost ~]# ping localhost & ...

  5. 【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)

    教程目录一 计时器简介二 计时器实现三 Demo下载 一 计时器简介在手机上跑游戏时,可能由于运动物体过多,导致帧频太低,计时不准确.比如一些倒计时的游戏,可能倒计时30s,变成了35s.比如ipho ...

  6. 抢滩5G,哪些行业将受最大影响?

    抢滩5G,哪些行业将受最大影响? 中国工信部6月6日已正式向中国电信.中国移动.中国联通.中国广电发放5G商用牌照.中国成为继韩国.美国.瑞士.英国之后,第五个宣布5G商用的国家. 这次颁发牌照,比计 ...

  7. 通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)

    通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二) 效果:默认一直隐藏导航栏,当滚动条滚到超过300px按钮出现,点击回 ...

  8. iOS开发小技巧--学会包装控件(有些view的位置由于代码或系统原因,位置或者尺寸不容易修改或者容易受外界影响)

    一.百思项目中遇到了两处这样的问题, 第一处 - 是评论界面的headerView,由于直接把自己搞的xib加载了放在了那里,xib中setFrame写了好多-=  +=,每次滚动的时候,会频繁调用x ...

  9. 让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素

    如果设置了,display:inline-block;边框大小至少和行高一样.这样就可能比文字高.

随机推荐

  1. css3椭圆运动

    通过使用css3实现让元素椭圆运动.而不是圆形运动. 效果1:http://sandbox.runjs.cn/show/ignefell 效果2:http://runjs.cn/code/w2wxjy ...

  2. 解决git从remote clone后所有文件都改变的问题

    遇到2次这种情况了,git从remote clone项目代码后发现所有文件都要改变,因为权限改变了,可以通过git来设置忽略权限变化 git config --global core.fileMode ...

  3. 使用xadmin覆盖Django的admin

    安装xadmin pip 安装 pip install xadmin  可能会报错 pip install git+git://github.com/sshwsfc/xadmin.git 安装后要使用 ...

  4. 在linux上怎么查看tomcat日志

    进入到tomcat的logs文件夹 tail -f catalina.out

  5. https的网站使用百度地图的问题

    https的网站使用百度地图,如果你引用的地址没写对的话,加载不出来百度地图,被认为是不安全的JS内容. 引用的地址:http://api.map.baidu.com/api?v=2.0&ak ...

  6. IE盒子模型和W3C盒子模型

    IE盒模型出现在ie5.5以下的版本当中,ie6以上就实行W3C盒模型. box-sizing有两个属性,border-box和content-box. border-box对应传统的盒子模型,即ie ...

  7. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  8. 编写sql查询语句思路

    编写查询语句思路/* 1.首先确定最终输出结果的列,包括几个方面:A.首先这些列来自于一个 表.还是多个表,如果是多个表则可能用到多表查询的(等值连接.不等值 连接.外连接.自连接):B.这些列是直接 ...

  9. thinkphp 跳转

    1   $this -> redirect('index',array('type'=>2,'id'=>0));   //直接跳转 2  $this->success('提交失 ...

  10. UVA11212 EditingaBook ( IDA*搜索)

    首先说说IDS,就DFS限定一个层数上限maxd,如果在maxd范围内没有找到解,就增加maxd,继续搜索. 当访问到当前结点u时,估计还要搜索h(u)层,如果h(u)+当前层数d>maxd的时 ...