LeetCode 2611. Mice and Cheese
原题链接在这里:https://leetcode.com/problems/mice-and-cheese/description/
题目:
There are two mice and n
different types of cheese, each type of cheese should be eaten by exactly one mouse.
A point of the cheese with index i
(0-indexed) is:
reward1[i]
if the first mouse eats it.reward2[i]
if the second mouse eats it.
You are given a positive integer array reward1
, a positive integer array reward2
, and a non-negative integer k
.
Return the maximum points the mice can achieve if the first mouse eats exactly k
types of cheese.
Example 1:
Input: reward1 = [1,1,3,4], reward2 = [4,4,1,1], k = 2 Output: 15 Explanation: In this example, the first mouse eats the 2nd (0-indexed) and the 3rd types of cheese, and the second mouse eats the 0th and the 1st types of cheese. The total points are 4 + 4 + 3 + 4 = 15. It can be proven that 15 is the maximum total points that the mice can achieve.
Example 2:
Input: reward1 = [1,1], reward2 = [1,1], k = 2 Output: 2 Explanation: In this example, the first mouse eats the 0th (0-indexed) and 1st types of cheese, and the second mouse does not eat any cheese. The total points are 1 + 1 = 2. It can be proven that 2 is the maximum total points that the mice can achieve.
Constraints:
1 <= n == reward1.length == reward2.length <= 105
1 <= reward1[i], reward2[i] <= 1000
0 <= k <= n
题解:
First mouse takes a[i], and second mouse takes b[j], where i and j are in exclusive in the set.
To maximize this, update a[i] + b[j] -> a[i] - b[i] + b[i] + b[j].
b[i] + b[j] = sum of b.
Then it becomes to maximize a[i] - b[i] for k indices.
Use a priority queue for the minimum heap, the size is k.
Time Complexity: O(nlogk). n = reward1.length.
Space: O(k).
AC Java:
1 class Solution { 2 public int miceAndCheese(int[] reward1, int[] reward2, int k) { 3 int res = 0; 4 PriorityQueue<Integer> minHeap = new PriorityQueue<>(); 5 int n = reward1.length; 6 for(int i = 0; i < n; i++){ 7 res += reward2[i]; 8 minHeap.add(reward1[i] - reward2[i]); 9 if(minHeap.size() > k){ 10 minHeap.poll(); 11 } 12 } 13 14 while(!minHeap.isEmpty()){ 15 res += minHeap.poll(); 16 } 17 18 return res; 19 } 20 }