太多坑了,考虑不全只能过50%,有两种特殊情况
public static void main(String[]args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int a[] = new int [100005];int b[] = new int [100005];for(int i =0;i<n;i++)a[i] = scan.nextInt();for(int i =0;i<n;i++)b[i] = a[i];Arrays.sort(a,0,n);int mid = a[n/2];int count = 0,count1 =0;for(int i =0;i<n;i++) {if(mid>a[i]){count1++;}else if(mid<a[i])count++;}int index = 0;if(count>count1)//如果比中位数大的数比较多index = 1;//标记一下else if(count1>count)//比中位数小的数比较多index = 2;//标记一下for(int i =0;i<n;i++){if(i<n-1) {if(b[i]<mid&&index!=2)//这种情况一般适用于没有重复mid数的情况//比如 12 10 15 20 6System.out.print(mid-b[i]+1+" ");else if(b[i]<mid&&index==2) {// 这种情况,0 不需要改成3 ,改成2就行了,自然不需要加1//2 2 1 1 1 1 1 0 0 0System.out.print(mid-b[i]+" "); }else if(b[i]==mid&&index==1)//这种情况,也就是比mid大的数多余小的数(只有在一种情况下发生:mid重复),所有mid如果扫描到都需要+1//0 0 1 1 1 1 1 2 2 2System.out.print(1+" ");elseSystem.out.print(0+" ");} //下面这个就是避免加空格,不是重点else {if(b[i]<mid&&index!=2)System.out.print(mid-b[i]+1);else if(b[i]<mid&&index==2) {System.out.print(mid-b[i]); }else if(b[i]==mid&&index==1)System.out.print(1);elseSystem.out.print(0);}}}