2143 最少刷题数
2143 最少刷题数
⭐️难度:中等
🌟考点:2022、前缀和、省赛、二分
📖
📚
import java.util.Scanner;
import java.util.Arrays;
public class Main2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
// 对数组进行排序
int[] arr = Arrays.copyOf(nums,n);
Arrays.sort(arr);
// 得到中值
int mid = arr[n/2];
// 计算小于或大于中值的元素个数
int less = 0;
int more = 0;
for (int i=0; i<n; i++) {
if (nums[i] < mid)
++ less;
else if(nums[i] > mid)
++ more;
}
// 进行判断,输出结果
for(int i=0; i<n; i++) {
if(nums[i] > mid)
System.out.print("0 ");
else if(nums[i] == mid && less >= more)
System.out.print("0 ");
else if(nums[i] == mid && less < more)
System.out.print("1 ");
else if(nums[i] < mid && less > more)
System.out.print(mid-nums[i] + " ");
else if(nums[i] < mid && less <= more)
System.out.print(mid-nums[i]+1 + " ");
}
}
}
要搞清楚和什么因素有关->大于mid的个数和小于mid的个数。
输出时:>mid只有一种情况0;==mid有两种情况;<mid也有两种情况。
自己多测几个特殊样例就能想出来了。