力扣870:
给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。
返回 A 的任意排列,使其相对于 B 的优势最大化。
package com.lz.third;
import java.util.Arrays;
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class HorseRacing {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] A=new int[] {10,24,8,32};
int[] B=new int[] {13,25,25,11};
System.out.println(Arrays.toString(advantageCount(A,B)));
}
public static int[] advantageCount(int[] A,int[] B) {
Arrays.sort(A);
int[] sortB=B.clone();
Arrays.sort(sortB);
Map<Integer,Deque<Integer>> bMap=new HashMap<Integer,Deque<Integer>>();
for(int b:B) {
bMap.put(b,new LinkedList<>());
}
Deque<Integer> aq=new LinkedList<>();
int j=0;
for(int a:A) {
if(a>sortB[j]){
bMap.get(sortB[j++]).add(a);
}else {
aq.add(a);
}
}
int[] ans=new int[A.length];
for(int i=0;i<B.length;i++) {
if(bMap.get(B[i]).size()>0) {
ans[i]=bMap.get(B[i]).removeFirst();
}else {
ans[i]=aq.removeFirst();
}
}
return ans;
}
}