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

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务