首页 > 腾讯开发岗22号笔试,第五题
头像
牛客630756206号
编辑于 2021-08-23 22:09
+ 关注

腾讯开发岗22号笔试,第五题

有一堆卡片,每个卡片上有对应数字,现在要把所有卡片变成同样的数字。位置连续且数字相同的卡片可同时变换,从一个数a变成另一个数b要消耗能量abs(a-b),求消耗最小能量
思路:其实和标准差很像,求平均,作差(结果带符号),然后大于零的位置连续的同时处理,小于零的连续的另外处理,至于怎么处理就是求他们的最大值(最小),然后绝对值相加
//java的代码
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] test = new int[num];
int sum = 0;
for(int i =0;i<num;i++){
int temp = sc.nextInt();
sum = sum + temp;
test[i] = temp;
}
int mean = sum / num;
System.out.print(minPower(test,mean));
}

public static int minPower(int[] blocks, int stnd) {
//向stnd值靠近
//计算每个block与stnd的差值
int[] gap = new int[blocks.length+1];
//我们给gap最后多加一个元素0,后续不用再做过多判断
gap[gap.length-1] = 0;
for (int i = 0; i < blocks.length; i++) {
gap[i] = blocks[i] - stnd;
}

int total = 0;
int maxormin = 0;

for (int i = 0; i < gap.length -1 ; i++) {
//记录当前是不是差值最大的元素
if(Math.abs(gap[i]-0)>maxormin){
maxormin = Math.abs(gap[i]-0);
}
//如果当前与下一个不连续
if (!((gap[i] >= 0 && gap[i + 1] >= 0) || (gap[i] < 0 && gap[i + 1] < 0))) {
total = total + maxormin;
maxormin = 0;
}
}
return total+maxormin;
}
}

全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐