超级左旋
题目
小立是一个乒乓球手,他的“超级左旋非常强大。
小立给自己制定了一份n天的训练计划来锻炼〝超级左旋”,并旦他每天会记录下失误的次数。
每天的训练结束后,小立都会进行反思自己是否退步。
之前每有一天的失误次数比今天的多,都会使他的能力值-1。
之前每有一天的失误次数比今天的少,都会使他的能力值+1。
之前每有-一天的失误次数与今天相同,不会影响他的能力值。
每天的能力值柠继承至下一天。初始能力值为0。
因为第—天没有之前的失误次数作为对照,所以第一天结束后,能力值不会改变。
求小立能力值最高时为多少,以及训练结束后小立的最終能力值为多少。
输入要求
输入一个数字T,表示有T组测试数据。
对于每组测试数据。第一行输入一个n,表示小立训练的天数。
第二行输入n个数字,ai(1<i<n)表示小立每天的失误次数。
(1 <= n, ai<=100000)
输出要求
对于每组测试数据,输出两个数字表示小立能力值最高为多少,以及训练结束后小立的最终能力值为多少
示例
输入
2
3
1 3 2
3
2 1 3
输出
1 1
1 1
思路
暴力法。
代码实现
java代码:
public class LeftSpiral {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
sc.nextLine();
List<Integer[]> list = new ArrayList<>(t);
int maxScore = 0;
for (int i = 0; i < t; i++) {
int days = sc.nextInt();
sc.nextLine();
String[] fault = sc.nextLine().split(" ");
Integer[] faultNum = new Integer[fault.length];
for (int j = 0; j < fault.length; j++) {
faultNum[j] = Integer.parseInt(fault[j]);
}
list.add(faultNum);
}
for (int i = 0; i < list.size(); i++) {
Integer[] temp = list.get(i);
int[] energy = new int[temp.length];
for (int j = 1; j < temp.length; j++) {
int high = 0;
int low = 0;
for (int k = 1; k <= j; k++) {
if (temp[k - 1] > temp[j]) {
low++;
}else if(temp[k-1]<temp[j]){
high++;
}
}
energy[j] = energy[j-1] -low+high;
if (energy[j] > maxScore) {
maxScore = energy[j];
}
}
System.out.println(maxScore+" "+ energy[energy.length-1]);
}
}
}
有问题留言,转载注明出处,谢谢!
相关文章
暂无评论...