博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
453、462 给定一个数组,找到让数组所有元素相等的最小移动次数。
阅读量:3592 次
发布时间:2019-05-20

本文共 728 字,大约阅读时间需要 2 分钟。

453 长为n的数组,找到让所有元素相等的最小移动次数。每次移动可以使n-1个元素增加1          

462 长为n的数组,找到让所有元素相等的最小移动次数,其中每次可以使一个元素加1或减1

 

 

一、453 长为n的数组,找到让数组所有元素相等的最小移动次数。每次移动可以使n-1个元素增加1

【题目】

 

【分析】

每次让n-1个增加1,相当于让n-1个不动,每次让1个减少1。

每次让一个减1,最后要所有的相等。当然是,让所有的减到最小的那个值。

移动次数 = 所有值的和 - (最小值*数组长度)

 

【代码】

 

【结果】

 

 

 

二、462 长为n的数组,找到让所有元素相等的最小移动次数,其中每次可以使一个元素加1或减1

 

【题目】

 

【分析】

很多人会先下结论:在中位数的地方碰头。然后再用一堆数学证明。。。马后炮!因为你根本想不到在中位数的地方碰头啊。。。

 

其实不要整体想,要分开想。

两个人相距为x,只要两个人往中间走,无论在哪个地方碰头,两人走的步数和都为x。

 

这个题也是啊。。

 

第1个人和最后1个人,只要往中间走,在哪碰头都是最少的,步数为nums[n-1]-nums[0];

第2个人和倒数第2个人,只要往中间走,在哪碰头都是最少的,步数为nums[n-2]-nums[1];
第3个人和倒数第3个人,只要网中间走,在哪碰头都是最少的,步数为nums[n-3]-nums[2];
.....

 

因此,先排序,然后所有人往最中间走。如果不都往中间走,边边的人倒是无所谓,中间的人就多走路了。

 

 

【方法一:先排序,再计算】

 

代码:

 

结果:

 

 

【方法二:o(n)时间】

 

方法一的时间复杂度为nlogn,但是我们可以o(n)内完成。

我们学过如何o(n)的时间内找到中位数。

后面再补。

 

 

 

 

 

 

转载地址:http://yslwn.baihongyu.com/

你可能感兴趣的文章
几分钟学会密码学(一)——维吉尼亚密码
查看>>
vulhub环境搭建+靶场使用
查看>>
Nginx 配置错误导致漏洞
查看>>
Webmin 远程命令执行漏洞
查看>>
Nginx越界读取缓存漏洞(CVE-2017-7529)
查看>>
DNS域传送漏洞——vulhub漏洞复现 007
查看>>
利用21端口的思路
查看>>
木马工作原理——病毒木马 002
查看>>
DHT11使用详解
查看>>
android
查看>>
Android——广播
查看>>
Android——内容提供者
查看>>
Android——网络编程
查看>>
Android——服务
查看>>
HarmonyOS工作原理解析
查看>>
数据库事务的四个特性及含义
查看>>
主题模型探讨
查看>>
几种常用的特征选择方法
查看>>
HMM ,MHMM,CRF 优缺点与区别
查看>>
stop word理解及超全的停用词表
查看>>