腾讯开发岗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;
}
}

#腾讯##笔试题目#
全部评论
1 5 5 4的情况没错,和题意一样,那如果是1 5 4 5呢?
1 回复 分享
发布于 2021-09-03 21:22
海淀区 腾讯及周边各大公司 附近的租房交流群 房源实时更新 只为帮有需求的小伙伴们找到合适的房子加(Asteria12314)或17600510025 (微信同步)
点赞 回复 分享
发布于 2021-10-06 23:21

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
今年秋招到底是谁在拿offer:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
点赞 3 评论
分享
牛客网
牛客企业服务