题目描述
小蓝教的编程课有 N 名学生,编号依次是 1 . . . N。第 i 号学生这学期刷题的数量是 Ai。
对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不超过刷题比他少的学生数。
输入格式
第一行包含一个正整数 N。
第二行包含 N 个整数
输出格式
输出 N 个整数,依次表示第 1 . . . N 号学生分别至少还要再刷多少道题。
样例输入
5
12 10 15 20 6
样例输出
0 3 0 0 7
提示
对于 30% 的数据,1 ≤ N ≤ 1000, 0 ≤ Ai ≤ 1000.
对于 100% 的数据,1 ≤ N ≤ 100000, 0 ≤ Ai ≤ 100000.
我的代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int []num=new int[N];
for(int i=0;i<N;i++) {
num[i] = sc.nextInt();
}
HashMap<Integer,Integer> map=new HashMap<>();
for(int i=0;i<N;i++){
map.put(i,num[i]);
}
List<Integer> value=new ArrayList<>();
for (int i=0;i<N;i++){
value.add(map.get(i));
}
Collections.sort(value);
int []count=new int[N];
int j=0;
for(int x:value){
count[j]=x;
j++;
}
int middle=count[N/2];
for(int i=0;i<N;i++){
if(map.get(i)<middle&&N%2!=0){
System.out.print(middle-map.get(i)+1);
System.out.print(" ");
}
else if(map.get(i)<middle&&N%2==0){
System.out.print(middle-map.get(i));
System.out.print(" ");
}
else{
System.out.print(0);
System.out.print(" ");
}
}
sc.close();
}
}
十个测试点只有三个通过,哪里出错了?