将数组转换为“长城”数组 最少需要几次操作

嘤嘤觉得长城很美,特别是它的锯齿,非常优雅,现在有一个数组,想把这个数组变为“长城”,即对于“长城”中的每一个元素左右两边的元素相等,并且与它不相等。
例如{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);
		
	}
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值