嘤嘤觉得长城很美,特别是它的锯齿,非常优雅,现在有一个数组,想把这个数组变为“长城”,即对于“长城”中的每一个元素左右两边的元素相等,并且与它不相等。
例如{2,1,2,1,2}是长城,{2,1,3,4,5}不是长城;
每次可以将一个元素加1,请问最少需要多少次?
输入:数组长度+数组每一个元素
6
1 1 4 5 1 4
输出:一个整数 表示最少的操作次数
11
网易笔试8.20
import java.util.Scanner;
public class Main {
public static int count(int[] num){
int n = num.length;
int maxOdd = 0; //奇数index
int maxEven = 0; //偶数index
for(int i = 0; i<n;i++){
if(i%2==1 && maxOdd<num[i]){
maxOdd = num[i];
}
if(i%2==0 && maxEven < num[i]){
maxEven = num[i];
}
}
int sum = 0;
for(int i = 0;i<n;i++){
if(i%2==0){
sum += maxEven-num[i];
}else{
sum += maxOdd-num[i];
}
}
if(maxEven!=maxOdd){
return sum;
}else{
return sum+n/2; //只能是加操作
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int[] arr = new int[number];
for(int i = 0; i < number; i++){
arr[i] = scanner.nextInt();
}
int ret = count(arr);
System.out.println(ret);
}
}