概述
import java.util.Scanner;
/*
* 思路:分治法。每一趟使相邻两个或三个小朋友满足rating值大于相邻rating值时糖果值大于相邻糖果值,直到最后一趟比较所有小朋友的糖果值都没有被修改(递归)。
*/
public class KidsCandy {
private static int n;
private static int[] r;
private static int[] a;
public static void main(String[] args) {
Scanner ns = new Scanner(System.in);
n = ns.nextInt();
r = new int[n];
a = new int[n];
for (int i = 0; i < n; i++) {
Scanner rs = new Scanner(System.in);
r[i] = rs.nextInt();
a[i] = 1;
}
checkOrder();
int sum = 0;
for (int i = 0; i < n; i++) {
// System.out.println(a[i]);
sum += a[i];
}
System.out.println(sum);
}
private static void checkOrder() {
boolean ordered = true;
if (r[0] > r[1] && a[0] <= a[1]) { // 最前两个比较
a[0] = a[1] + 1;
ordered = false;
}
for (int i = 1; i < n - 1; i++) { // 去掉第一个和最后一个比较
if (r[i] > r[i + 1] && a[i] <= a[i + 1]) {
a[i] = a[i + 1] + 1;
ordered = false;
}
if (r[i] > r[i - 1] && a[i] <= a[i - 1]) {
a[i] = a[i - 1] + 1;
ordered = false;
}
}
if (r[n - 1] > r[n - 2] && a[n - 1] <= a[n - 2]) { // 最后两个比较
a[n - 1] = a[n - 2] + 1;
ordered = false;
}
if (!ordered) {
checkOrder(); // 直到没有改变糖果值,比较结束
}
}
}
最后
以上就是瘦瘦蜗牛为你收集整理的编程挑战(二)分配糖果的全部内容,希望文章能够帮你解决编程挑战(二)分配糖果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复