首页 > 学院 > 开发设计 > 正文

算法作业_3(2017.2.27第二周)

2019-11-06 09:14:08
字体:
来源:转载
供稿:网友

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.

分析:题目要求求出使所有元素相等的最少步数,每次只能对元素经行加一操作。简单的想法是找出数组中的最大元素和最小元素,然后迭代的对每个元素经行加一操作(除了最大的以外)。这样做比较麻烦,而且题目要求只需要算出至少要操作几步,所以不必对数组中的元素经行操作,我们只需要计算出移动的步数就可以。可以先对数组经行一个排序,让所以元素按从小到大顺序排列,这样,用最后一个元素(最大的)减去第一元素就是第一个元素需要累加的步数,依次用最后一个元素减去第二个元素就是第二个元素需要操作的步数。。。依次累加下去即可。

class Solution {public:    int minMoves(vector<int>& nums) {        if(nums.empty())            return 0;        sort(nums.begin(),nums.end());        int count = 0;        for (int i = nums.size() - 1; i > 0; i--) {            count =count + nums[i] - nums[0];        }        return count;    }};


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表