0870. Advantage Shuffle (M)

Advantage Shuffle (M)

题目

Given two arrays A and B of equal size, the advantage of A with respect to B is the number of indices i for which A[i] > B[i].

Return any permutation of A that maximizes its advantage with respect to B.

Example 1:

Input: A = [2,7,11,15], B = [1,10,4,11]
Output: [2,11,7,15]

Example 2:

Input: A = [12,24,8,32], B = [13,25,32,11]
Output: [24,32,8,12]

Note:

  1. 1 <= A.length = B.length <= 10000
  2. 0 <= A[i] <= 10^9
  3. 0 <= B[i] <= 10^9

题意

给定数组A和B,重排列A,使得相同下标A元素比B元素大的对数最多。

思路

贪心。记结果数组为res。先将B中元素及对应下标复制到新数组copyB中,排序A和copyB。从大到小遍历copyB,记当前值为B_MAX,对应下标为index,如果A中剩余元素中的最大值A_MAX大于B_MAX,那么res[index]=A_MAX,否则res[index]=A_MIN。


代码实现

Java

class Solution {
    public int[] advantageCount(int[] A, int[] B) {
        int[] res = new int[A.length];
        int[][] copyB = new int[B.length][2];
        int minP = 0, maxP = A.length - 1;

        for (int i = 0; i < B.length; i++) {
            copyB[i][0] = B[i];
            copyB[i][1] = i;
        }

        Arrays.sort(A);
        Arrays.sort(copyB, (a, b) -> b[0] - a[0]);

        for (int i = 0; i < copyB.length; i++) {
            res[copyB[i][1]] = A[maxP] > copyB[i][0] ? A[maxP--] : A[minP++];
        }

        return res;
    }
}
原文地址:https://www.cnblogs.com/mapoos/p/14574765.html