一、题目:
比如一段连续的整数:3 4 5 6 7,如果一个数组是连续的一段整数那么他就是好看的。我们要将一个给定的数组修改为好看的数组。我们可执行的操作是“将第k个数加1或者减1”,求修改为好看数组的最小操作次数。
输入:
第一行输入数组元素个数:如输入5;
第二行输入数组元素,用空格隔开,如输入{2 3 5 7 11};
提示:其中一个最优解是将第五个元素2调整为4,将第三个元素11调整为6;最后得到的数组是7 3 6 5 4.这几个数排序以后为:3 4 5 6 7。
二、思路:
问题就转化为让图片中的b数组元素相等。遍历b数组找到最小操作数
三、代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class main2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
int res = Integer.MAX_VALUE;
String[] str = sc.nextLine().split(" ");
ArrayList<Integer> a = new ArrayList<>();
for (int i = 0; i < n; i++) {
a.add(Integer.parseInt(str[i]));
}
Collections.sort(a);
ArrayList<Integer> b = new ArrayList<>();
for(int i=0; i<n; i++){
b.add(a.get(i) - i);
}
for(int i=0; i<n; i++){
int sum = 0;
for(int j=0; j<n; j++){
sum += Math.abs(b.get(i) - b.get(j));
}
res = Math.min(res,sum);
}
System.out.println(res);
}
}