链接:https://leetcode-cn.com/problems/largest-values-from-labels/submissions/
贪心问题,label和value都按value从大到小排序,然后取满足条件的尽可能大的即可。
C++代码:
class Solution {
public:
struct pair{
int value;
int label;
};
int largestValsFromLabels(vector<int>& values, vector<int>& labels, int num_wanted, int use_limit) {
vector<pair> p;
for(int i = 0;i<values.size();i++)
{
pair np{values[i],labels[i]};
p.push_back(np);
}
sort(p.begin(), p.end(),
[](pair i1, pair i2) {
return (i1.value>i2.value);
});
unordered_map<int, int> m;
int sum = 0;
int num_sum = 0;
for(int i =0 ;i<values.size();i++)
{
if(num_sum>=num_wanted)
return sum;
else if(m[p[i].label] == use_limit)
continue;
else
{
m[p[i].label]++;
sum+=p[i].value;
num_sum++;
}
}
return sum;
}
};
本文介绍了一种解决LeetCode题目“最大标签价值”的贪心算法策略,通过将标签和价值排序并选择满足条件的最大值来求解。提供了详细的C++代码实现,包括自定义结构体和排序函数。
389

被折叠的 条评论
为什么被折叠?



