题意:给定一个待排序数组和一个参考数组,对于待排序数组,优先按照参考数组里的顺序来排,其他的数再按照升序排
题解:自定义一个数据结构,保存数值和优先级,在初始化的时候把数放到我们自定义的数据结构数组的数值中,再遍历一遍我们自定义数据结构的数组,记参考数组长度为parray_length,出现哪个位置(pos)的数,我们就把自定义的数据结构中优先级置为parray_length-pos,其余未出现的优先级置为0,改写Arrays.sort(,new Comparator());使其优先按照优先级排序即可。
代码:
import java.util.*;
class Node{
public Node(int value){
this.value = value;
}
int value;
int priority;
public void getPriority(int priority){
this.priority = priority;
}
}
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int e_num = scan.nextInt();//测试数
while(e_num>0){
int varray_length = scan.nextInt();//the length of array
int parray_length = scan.nextInt();
HashMap<Integer,Integer> map = new HashMap<>();
Node[] narray = new Node[varray_length];
int[] parray = new int[parray_length];
for(int i=0;i<varray_length;i++){
narray[i] = new Node(scan.nextInt());
}
for(int i=0;i<parray_length;i++){
parray[i] = scan.nextInt();
}
for(int i=0;i<varray_length;i++){
narray[i].getPriority(0);
for(int j=0;j<parray_length;j++){
if(narray[i].value == parray[j]){
narray[i].getPriority(parray_length-j);
}
}
// System.out.println(nodearray[i].count);
}
Arrays.sort(narray,new Comparator<Node>(){
@Override
public int compare(Node o1,Node o2){
if(o1.priority>o2.priority){
return -1;
}
if(o1.priority<o2.priority){
return 1;
}
if(o1.value<o2.value){
return -1;
}
if(o1.value>o2.value){
return 1;
}
return 0;
}
});
for(int i=0;i<varray_length;i ++){
if(i!=varray_length-1){
System.out.print(narray[i].value+" ");
}else{
System.out.print(narray[i].value);
}
}
System.out.println();
e_num --;
}
}
}