leetcode-453. Minimum Moves to Equal Array Elements
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 array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input: [1,2,3] Output: 3 Explanation: Only three moves are needed (remember each move increments two elements): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
题意:
给定一个非空数组,长度为 n,定义一种移动操作,每次可以将 n-1 的个元素加 1,求最少次的移动,是所有元素都相等
题解:
我也是看了discuss的,其实是一个数学问题。 首先,每次肯定都要将前 n-1 个较小的元素加 1 !
大致意思是:
定义 sum 为数组所有元素的和,minNum 为最小元素, n 为数组长度, 所求最小移动次数为 m ,移动 m 次后所有元素的值都是 x
- 首先有 sum + m*( n - 1) = x * n ,(这个好理解,m次移动,每次都能加 n-1 ,最后的值都是 x,共有 n 个)
- 其次有 x = minNum + m (最终的元素值为 x ,最小值每次都要 “移动“” 的 )
- 两个方程联立,就能求出 m = sum - n * minNum ,这就是所求的了。
附上代码:
class Solution { public int minMoves(int[] nums) { Arrays.sort(nums); int sum = 0; for(int i = 0;i<nums.length;i++) sum+=nums[i]; return sum - nums.length*nums[0]; } }
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C# 代码如何影响 CPU 缓存速度?
· 智能桌面机器人:使用 .NET 为树莓派开发 Wifi 配网功能
· C# 模式匹配全解:原理、用法与易错点
· 记一次SSD性能瓶颈排查之路——寿命与性能之间的取舍
· 理解 .NET 结构体字段的内存布局
· 时隔半年,拾笔分享:来自一个大龄程序员的迷茫自问
· 3 个超火的开源项目「GitHub 热点速览」
· C#-Visual Studio工具使用实践
· [原创]《C#高级GDI+实战:从零开发一个流程图》第02章:画一个矩形,能拖动!
· WineHQ 发布的 Framework Mono 6.14 的这个特性对Windows Form