问题:

我们有一个项的集合,其中第 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. PAT甲级——1111 Online Map (单源最短路经的Dijkstra算法、priority_queue的使用)

    本文章同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90041078   1111 Online Map (30 分) ...

  2. 详解javascript中的this对象

    详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...

  3. C++文件操作方法小结

    - 获取文件句柄 - fopen, fclose fopen(filename, opentype): 按照opentype的方式打开指定文件,打开失败返回NULL,否则返回文件句柄. 打开类型的属性 ...

  4. Oracle .NET Core

    Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle https://www.cnblogs.com/yanweidie/p/9064609.html 使用.ne ...

  5. Token认证登录以及权限控制

    IdentityServer4实现Token认证登录以及权限控制   相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的: ...

  6. 爬虫(Xpath)——爬tieba.baidu.com

    工具:python3 核心知识点: 1)lxml包不能用pip下载,因为里面有其他语言编写的文件 2)urlopen返回的请求是html文件,要使用 content = etree.HTML(html ...

  7. Json规范

    标准格式 书写使用首字母小写驼峰式 {" status":0   //状态 大于0代表正常.小于等于0代表异常 "message":"",/ ...

  8. CDH5.7.2离线部署笔记

    1.部署基本信息说明: 1.1.主机信息 操作系统:选择CentOS6.7 x86-64版本 MEM:64GB,CPU: E5-2630 v3 @ 2.40GHz, DISK:2TB*4(数据节点存储 ...

  9. Could not load file or assembly 'Oracle.ManagedDataAccessDTC.DLL' or one of its dependencies.

    Could not load file or assembly 'Oracle.ManagedDataAccessDTC.DLL' or one of its dependencies.  不是有效的 ...

  10. 数据库操作是sql的操作1

    项目过来以后, 查 先肯定是做UI , 1.在UI层先加载 2数据来源在dal层, 3再到model层,得到属性 public int MId { get; set; } public string ...