题目描述:给定两个大小相等的数组 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; } }
|