Algorithm


Problem Name: 1090. Largest Values From Labels

Problem Link: https://leetcode.com/problems/largest-values-from-labels/ 

There is a set of n items. You are given two integer arrays values and labels where the value and the label of the ith element are values[i] and labels[i] respectively. You are also given two integers numWanted and useLimit.

Choose a subset s of the n elements such that:

  • The size of the subset s is less than or equal to numWanted.
  • There are at most useLimit items with the same label in s.

The score of a subset is the sum of the values in the subset.

Return the maximum score of a subset s.

 

Example 1:

Input: values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1
Output: 9
Explanation: The subset chosen is the first, third, and fifth items.

Example 2:

Input: values = [5,4,3,2,1], labels = [1,3,3,3,2], numWanted = 3, useLimit = 2
Output: 12
Explanation: The subset chosen is the first, second, and third items.

Example 3:

Input: values = [9,8,8,7,6], labels = [0,0,0,1,1], numWanted = 3, useLimit = 1
Output: 16
Explanation: The subset chosen is the first and fourth items.

 

Constraints:

  • n == values.length == labels.length
  • 1 <= n <= 2 * 104
  • 0 <= values[i], labels[i] <= 2 * 104
  • 1 <= numWanted, useLimit <= n

 

Code Examples

#1 Code Example with Javascript Programming

Code - Javascript Programming


const largestValsFromLabels = function(values, labels, num_wanted, use_limit) {
  return Object.entries(
    labels.reduce((ret, l, i) => {
      ret[l] = (ret[l] || []).concat(values[i])
      return ret
    }, {})
  )
    .reduce(
      (candi, [k, vals]) =>
        candi.concat(vals.sort((a, b) => b - a).slice(0, use_limit)),
      []
    )
    .sort((a, b) => b - a)
    .slice(0, num_wanted)
    .reduce((ret, n) => ret + n, 0)
};
Copy The Code & Try With Live Editor

Input

x
+
cmd
values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1

Output

x
+
cmd
9

#2 Code Example with Python Programming

Code - Python Programming


class Solution:
    def largestValsFromLabels(self, values: List[int], labels: List[int], num_wanted: int, use_limit: int) -> int:
        cnt = collections.defaultdict(int)
        heap = [[-a, b] for a, b in zip(values, labels)]
        heapq.heapify(heap)
        use = sm =0 
        while use < num_wanted and heap:
            a, b = heapq.heappop(heap)
            if cnt[b] < use_limit:
                sm -= a
                use += 1
                cnt[b] += 1
        return sm
Copy The Code & Try With Live Editor

Input

x
+
cmd
values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1

Output

x
+
cmd
9
Advertisements

Demonstration


Previous
#1089 Leetcode Duplicate Zeros Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#1091 Leetcode Shortest Path in Binary Matrix Solution in C, C++, Java, JavaScript, Python, C# Leetcode