leetcode-870 优势洗牌

题目描述:给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。

返回 A 的任意排列,使其相对于 B 的优势最大化。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Pair implements Comparable<Pair> {
private Integer index;

private Integer value;

public Integer getIndex() {
return index;
}

public void setIndex(Integer index) {
this.index = index;
}

public Integer getValue() {
return value;
}

public void setValue(Integer value) {
this.value = value;
}

@Override
public int compareTo(Pair o) {
return this.getValue() - o.getValue();
}

public static Pair of(int index, int value) {
Pair pair = new Pair();
pair.setIndex(index);
pair.setValue(value);
return pair;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public int[] advantageCount(int[] nums1, int[] nums2) {
int len = nums1.length;
PriorityQueue<Pair> queue = new PriorityQueue<>((p1, p2) -> p2.compareTo(p1));
for (int i = 0; i < len; i++) {
queue.add(Pair.of(i, nums2[i]));
}

int[] res = new int[len];

Arrays.sort(nums1);
int idx1Start = 0;
int idx1End = len - 1;
while (!queue.isEmpty()) {
Pair maxPair = queue.poll();
if (maxPair.getValue() < nums1[idx1End]) {
res[maxPair.getIndex()] = nums1[idx1End];
idx1End--;
}else {
res[maxPair.getIndex()] = nums1[idx1Start];
idx1Start++;
}
}
return res;
}
}