码迷,mamicode.com
首页 > 移动开发 > 详细

453. 最小移动次数使数组元素相等(数学)

时间:2019-12-22 18:05:39      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:数学   microsoft   bsp   次数   个数   思考   width   solution   span   

技术图片

题意:一次操作,n元数组中任意n-1个数+1。求取最小操作次数使得数组所有元素相等。

分析:

1.正面思考,每次将数组中除最大值以外的所有值+1,直到所有元素都相等。

2.反面思考,每次将数组中的最大值-1,直到所有元素相等(最少操作次数=数组和-n*数组最小值)

n元数组,其中n-1元+1,因为只要求元素相等,可以不考虑值,可以整体再-1,两次操作后也就是一元-1。

 

反面思考数学证明:

假设所有元素都相等时数字为k, 如果最小数字经过x次移动能够等于k, 则此时所有元素也能等于k, 此时移动次数为k-min(nums).
则有方程: 数组元素总和增加量 = 终止时数组元素总和 - 开始时数组元素总和
即方程: (k-min(nums)) * (n-1) = k * n - sum(nums)
求解后: k = sum(nums) - min(nums) * (n-1)
则可以得到最小移动次数  k-min(nums)

 1 class Solution {
 2     public int minMoves(int[] nums) {
 3         if(nums==null) return 0;
 4         int min=Integer.MAX_VALUE,sum=0;
 5         for(int num:nums){
 6             sum+=num;
 7             if(min>num) min=num;
 8         }
 9         return sum-nums.length*min;
10     }
11 }

453. 最小移动次数使数组元素相等(数学)

标签:数学   microsoft   bsp   次数   个数   思考   width   solution   span   

原文地址:https://www.cnblogs.com/NiBosS/p/12080284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!