Leetcode 453.最小移动次数使数组元素相等
发布日期:2022-03-13 05:36:10 浏览次数:15 分类:技术文章

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

最小移动次数使数组元素相等

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

示例:

输入:

[1,2,3]

 

输出:

3

 

解释:

只需要3次移动(注意每次移动会增加两个元素的值):

 

[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]

 

 

题解:

 

首先,每次加一的元素肯定是数组中最小的n-1和元素

 

其次,把最小的n-1个元素都加1,相当于所有元素都加1,最大的元素减一,因为题目要求最后的元素值相同即可,所以所有元素加一操作完全可以去掉,即每一次的"移动"操作等价于把最大元素减一

 

再次,经过多次"移动",必然能达到元素值完全相同,且最终状态为每个元素都等于初始数组的最小值,因为每次"移动"都是把最大值减一,只要数组中最大值不等于最小值,那么就会对最大值减一。

 

最后,移动的次数等于sum(nums)-min(nums)*len(nums),

 

因为每次都只能减一,且最终状态为最小值,对于nums[i],变化到最小值需要nums[i]-min(nums)

 

1 class Solution { 2     public int minMoves(int[] nums) { 3         if(nums==null||nums.length==0) return 0; 4         int min=Integer.MAX_VALUE; 5         int sum=0; 6         for(int i=0;i
nums[i]){ 9 min=nums[i];10 }11 }12 return sum-min*nums.length;13 }14 }

 

转载于:https://www.cnblogs.com/kexinxin/p/10269851.html

转载地址:https://blog.csdn.net/weixin_30323961/article/details/98217869 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:线程、进程的基本知识(纯知识)
下一篇:【T-SQL系列】临时表、表变量

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月05日 19时38分29秒