用java 实现 小美正在整理桌子上的一排装饰品。小美对待装饰品摆放方式的审美角度很奇特,她认为高度相差比较大的装饰品放在相邻位置会很难看,她想对这一排装饰品进行整理,可以交换任意两个装饰品的位置任意多次。假设当前从左到右n个装饰品的高度分别为h1,h2,...,hn,那么当前这一排装饰品的丑陋值为,其中|x|为x的绝对值。小美想最小化她的装饰品的丑陋值,请你帮她排一下顺序。 形式化地来讲,有一长为n的序列a1,a2,...,an,你可以任意次数地进行交换,每次交换都可以选择任意两个不同的数i,j,交换ai,aj的位置。假设经过若干次交换后,序列变为h1,h2,...,hn,其丑陋值为 ,你需要找出一种交换方式,使得最终序列{hn}的丑陋值最小化。你不需要输出具体交换方式,只需要输出最终的{hn}序列的丑陋值即可。
时间: 2024-02-24 07:53:57 浏览: 131
这道题可以使用冒泡排序的思想来解决。每次比较相邻两个数,如果它们的高度差比较大,就交换它们的位置,这样每次交换都可以减小整体的丑陋值。具体实现可以参考以下Java代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] h = new int[n];
for (int i = 0; i < n; i++) {
h[i] = scanner.nextInt();
}
int ans = ugly(h);
System.out.println(ans);
}
public static int ugly(int[] h) {
int n = h.length;
int ans = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (Math.abs(h[j + 1] - h[j]) > Math.abs(h[j] - h[j - 1])) {
int tmp = h[j];
h[j] = h[j + 1];
h[j + 1] = tmp;
}
}
ans += Math.abs(h[n - i - 1] - h[n - i - 2]);
}
return ans;
}
}
```
上面的代码中,ugly方法实现了求解最小丑陋值的功能,它使用了冒泡排序的思想,每次比较相邻两个数,如果它们的高度差比较大,就交换它们的位置。在每次交换后,还要计算当前序列的丑陋值。最终,ugly方法返回的是整个序列的最小丑陋值。
阅读全文