题目描述:

Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.

Example:

Input:
[1,2,3]Output:
3Explanation:
Only three moves are needed (remember each move increments two elements):[1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]

要完成的函数:

int minMoves(vector<int>& nums)

说明:

1、这道题看起来有点意思。

我们先举一个[1,2,3,4]的例子,看能不能发现点什么规律。

[1,2,3,4],挑选里面最小的3个元素+1

[2,3,4,4],挑选里面最小的3个元素+1

[3,4,5,4],挑选里面最小的3个元素+1

[4,5,5,5],挑选里面最小的3个元素+1

[5,6,6,5],挑选里面最小的3个元素+1

[6,7,6,6],挑选里面最小的3个元素+1

[7,7,7,7],挑选里面最小的3个元素+1

我们可以发现在处理vector的时候,总是会选择里面最小的n-1个元素来+1。这样子处理,直觉告诉我们这是最快的。

的确如此,假如在[3,4,5,4]这一步,我们不选择最小的三个元素来处理,而是选择4,5,4来+1,结果会是[3,5,6,5]。后续无论怎样处理都达不到[7,7,7,7]了。

选择最小的n-1个元素来处理,这是最快达到“所有数值都相等”的方法。

按理来说,知道了这些信息,我们就可以写代码来模拟这个过程:

每次找到最大元素,然后把除了最大元素的其他元素+1。

不断重复处理,直到所有元素都相等。

输出重复处理的次数。

但是总觉得这里面有一缕能够直接计算输出的味道。

我们再回过头来看一下。

2、数学方法

n-1个数+1,如果重复处理count次,那么就是(n-1)*count,加上原本n个数的数值,加完结果会等于所有相等的数(设为t)*n。

也就是(n-1)*count+(n个数的数值)=t*n。

关键就在于t的值了。

我们回过头看一下1中举的例子,每一次的处理,最小值1都参与,一共加了6次,最后变成7。

直觉告诉我们,最开始时候最小值会加上count次,也就是t应该是min+count。

如果这个结论成立的话,上述式子就可以解出count来了。

我们尝试一下,代码如下:

    int minMoves(vector<int>& nums) {int min1=nums[0];//记录最小值int len=nums.size();int result=nums[0];//记录nums中的数值的和for(int i=1;i<len;i++){result+=nums[i];if(nums[i]<min1)min1=nums[i];}return result-min1*len;//我们要求的count}

submit,实测51ms,beats 94.55% of cpp submissions。通过了所有测试样例……

我们的直觉为什么是成立的?笔者在推[1,2,3,4]的时候,觉得直觉的想法应该大致是成立的,但是想给出一个数学上的解释就比较麻烦了。

姑且放过笔者吧……日后被remind到简单又好懂的推理方法再来补充。

转载于:https://www.cnblogs.com/chenjx85/p/8920996.html

leetcode-453-Minimum Moves to Equal Array Elements相关推荐

  1. LeetCode 453. Minimum Moves to Equal Array Elements

    题目: Given a non-empty integer array of size n, find the minimum number of moves required to make all ...

  2. leetcode 462. Minimum Moves to Equal Array Elements II

    这道题目和leetcode453是有联系的,虽然这道题难度为中等,但是我感觉初等难度的453绕的弯子更大一些. 题目:Given a non-empty integer array, find the ...

  3. LeetCode 462 Minimum Moves to Equal Array Elements II

    问题:给出一个数组,每次可以从中选择一个数+1或者-1,使得数组中的所有元素相等,要求操作次数最少. 思路:假设元素分别为x1,x2,...,xn,元素最终等于x,则要求|x1-x|+|x2-x|+. ...

  4. 453. Minimum Moves to Equal Array Elements (python)

  5. leetcode 453,462. Minimum Moves to Equal Array Elements I, II | 453, 462. 最少移动次数使数组元素相等(图解)

    453. Minimum Moves to Equal Array Elements https://leetcode.com/problems/minimum-moves-to-equal-arra ...

  6. LeetCode Minimum Moves to Equal Array Elements II

    原题链接在这里:https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/ 题目: Given a non-empt ...

  7. C#LeetCode刷题之#453-最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3877 访问. 给定一个长度为 n 的非空整数数组,找到让数组所有 ...

  8. java求最小步数,使数组值相等的最小步数 Minimum Moves to Equal Array Elements

    问题: Given a non-empty integer array of size n, find the minimum number of moves required to make all ...

  9. LeetCode Find Minimum in Rotated Sorted Array II

    Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? Woul ...

最新文章

  1. ZooKeeper的一致性算法赏析
  2. 语言 上课点名 缺勤_主播日记5 | “云端”传递的C语言程序设计实验课
  3. 2019年山西计算机二级报名入口,2019年下半年山西省计算机二级考试教程:Web程序设计...
  4. VTK:图片之DrawOnAnImage
  5. 清华经管计算机金融专业,非量化背景拿下MIT MFin的清华经管学姐,详解MIT金融项目优劣和职业方向...
  6. Linux 命令之 less -- 分屏上下翻页浏览文件内容(查看文件内容/显示文件内容)
  7. css blink不闪烁_使它闪烁HTML教程–如何使用Blink标签以及代码示例
  8. 集群搭建预备操作:在私有云上创建与配置虚拟机
  9. C++四种强制类型转换解析
  10. python多重继承_Python多重继承
  11. Sketch 76 for mac(矢量绘图设计软件)
  12. 用ASP.NET刷新页面的几种有效方法
  13. 数据挖掘概念与技术第三版 范明、孟晓峰译 第三章习题答案
  14. 游戏里的攻防-检测与反检测
  15. Excel表中只能选择固定内容
  16. Win11如何查看硬盘型号?Win11查看硬盘型号步骤
  17. HtmlHelper用法大全(下)
  18. 开发与测试如同左手和右手
  19. FIL是否值得长期持有以及未来评估
  20. 小程序成四大行业商家标配,小程序代理市场如何

热门文章

  1. android 自定义paint,Android自定义View中Paint、Rect、Canvas介绍(一)
  2. uc3842改可调电源教程_《学习笔记》--DC/DC电源电路设计实例
  3. python压缩教程_无需压缩软件,用python帮你操作压缩包
  4. java开发app的缺点_App原生开发的优缺点有哪些
  5. android system_server中的dump_Android 10.0系统启动之SystemServer进程(二)
  6. .net framework 4.0安装_R4.0的源码安装——以mac为例
  7. java mvc jquery weui_WEUI 事件绑定
  8. 恢复误删的Windows文件
  9. 腾讯开源业内最大多标签图像数据集,附ResNet-101模型
  10. 大限将至?Google先知