码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 453. Minimum Moves to Equal Array Elements

时间:2018-12-04 22:22:06      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:tor   make   vector   amp   Plan   member   pre   tco   exp   

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]
class Solution {
public:
    int minMoves(vector<int>& nums) {
        int minval=*min_element(nums.begin(),nums.end());
        int sum=accumulate(nums.begin(),nums.end(),0);
        return sum-nums.size()*minval;
        //分析如下:
          首先题目的意思是每次move,相当于选nums里nums.size()-1个数加1,然后不停的执行move,直到nums里的数都相等;
          先来分析一下,不管每次怎么move,被选中要加一的数里一定含有最小的那个数,如若不然,就是加1的数里没有最小的那个,其他的数本来就比它大了,加1后就更           大了,要求是最少的move次数,所以必须每次move中要加1的数里含有最小的那个数。
          设最后每个数都是m。 一开始nums中最小的数是minval, nums的和是sum。cnt是move的次数
          每次move,相当于sum加nums.size()-1。
          于是最后根据每个数相等 有方程:
              nums.size()*m=sum+cnt*(nums.size()-1),  
          又每次move加1里都有minval,所以move的次数cnt=m-minval.
          可以解出 cnt=sum-nums.size()*minval;
        
    }
};

LeetCode 453. Minimum Moves to Equal Array Elements

标签:tor   make   vector   amp   Plan   member   pre   tco   exp   

原文地址:https://www.cnblogs.com/A-Little-Nut/p/10066976.html

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