【每日一题Day215】LC1090受标签影响的最大值 | 贪心+排序+哈希表

简介: 【每日一题Day215】LC1090受标签影响的最大值 | 贪心+排序+哈希表

受标签影响的最大值【LC1090】

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

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

  • 子集 s 的大小 小于或等于numWanted
  • s最多 有相同标签的 useLimit 项。

一个子集的 分数 是该子集的值之和。

返回子集 s 的最大 分数

思路

  • 由于能够取的数有数量限制,因此我们应该优先取数值较大的数【局部最优】,以获得最大分数【全局最优】
  • 由于相同标签只能选择useLimit个数,因此需要使用哈希表记录每个标签已经取的数的个数。
  • 将数组按照值降序排序,判断当前标签能否取,如果能那么取该数,不能直接跳至下一个数
  • 实现
class Solution {
    public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) {
        int n = values.length;
        int[][] data = new int[n][2];
        Map<Integer,Integer> map = new HashMap<>();
        int res = 0;
        for (int i = 0; i < n; i++){
            data[i][0] = values[i];
            data[i][1] = labels[i];
        }
        Arrays.sort(data, (o1, o2) -> o2[0] - o1[0]);
        int count = 0, i = 0;
        while (count < numWanted && i < n){
            if (map.getOrDefault(data[i][1], 0) < useLimit){
                count++;
                res += data[i][0];
                map.put(data[i][1], map.getOrDefault(data[i][1], 0) + 1);
            }
            i++;
        }
        return res;
    }
}

image.png

目录
相关文章
|
5月前
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
22 0
|
5月前
【每日一题Day118】LC1124表现良好的最长时间段 | 前缀和+单调栈/哈希表
【每日一题Day118】LC1124表现良好的最长时间段 | 前缀和+单调栈/哈希表
31 0
|
5月前
|
存储
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
29 0
|
5月前
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
27 0
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
|
5月前
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
21 0
|
5月前
|
机器学习/深度学习
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
20 0
|
5月前
【每日一题Day278】LC2500删除每行中的最大值 | 排序+模拟
【每日一题Day278】LC2500删除每行中的最大值 | 排序+模拟
20 0
|
4月前
|
算法 测试技术 C#
【数学】LeetCode1526: 形成目标数组的子数组最少增加次数
【数学】LeetCode1526: 形成目标数组的子数组最少增加次数
|
5月前
【每日一题Day227】LC2465不同的平均值数目 | 排序 + 哈希表
【每日一题Day227】LC2465不同的平均值数目 | 排序 + 哈希表
17 0
|
5月前
|
机器学习/深度学习
【每日一题Day128】LC2357使数组中所有元素都等于零 | 排序+模拟 哈希表
【每日一题Day128】LC2357使数组中所有元素都等于零 | 排序+模拟 哈希表
19 0