Leetcode——453. Minimum Moves to Equal Array Elements
2017-01-21 16:04
471 查看
题目
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]
解答
第一种方法:1. 先对数组从小到大进行排序
2. 比较最后一个和第一个是否相等,如果相等就返回结果,不等进行第三步
3. 然后对前n-1个进行++,然后把第n个放到合适的位置
4. 执行第2步
上述方法时间复杂度是O(N^2)
第二种方法:
每次增加n-1个元素,最后结果是所有元素都相等,可以转换思想,就是每次都把最大的元素减去1,最后所有元素都等于最小的元素。
所以进行的操作次数总共是:所有元素相加,减去元素个数*最小的元素。注意有可能溢出,可以把元素相加的和转化为long long类型来保存。
class Solution1 {//超时了 public: int minMoves(vector<int>& nums) {//复杂度O(N^2) int res=0; std::sort(nums.begin(),nums.end());//先排序,O(NlogN) int len=nums.size(); while(nums[len-1]!=nums[0])//最后一个不等于第一个 { res++; for(int i=0;i<nums.size()-1;i++) nums[i]++; //重新排序 int temp=nums[len-1]; int j=len-1; while(j>=1&&nums[j-1]>temp) { nums[j]=nums[j-1]; j--; } nums[j]=temp; } return res; } }; class Solution { public: int minMoves(vector<int>& nums) {//复杂度O(N^2) long long res=0; //寻找最小的那个元素 int MinElem=INT_MAX; for(int i=0;i<nums.size();i++) if(nums[i]<MinElem) MinElem=nums[i]; for(int i=0;i<nums.size();i++) res=res+nums[i]; res=res-(long long)MinElem*(long long)nums.size(); return res; } };
相关文章推荐
- 【leetcode】453. Minimum Moves to Equal Array Elements【E】
- 小白笔记---------------------leetcode( 453. Minimum Moves to Equal Array Elements )
- [LeetCode]453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements [LeetCode]
- 【Leetcode】453. Minimum Moves to Equal Array Elements
- LeetCode453. Minimum Moves to Equal Array Elements我是这么解答的
- LeetCode-453. Minimum Moves to Equal Array Elements
- 【leetcode】【Easy】【453. Minimum Moves to Equal Array Elements】【math】
- leetcode 453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements
- [leetcode] 453. Minimum Moves to Equal Array Elements 解题报告
- LeetCode 453. Minimum Moves to Equal Array Elements
- [leetcode]453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements
- Leetcode 453. Minimum Moves to Equal Array Elements 使数组相等 解题报告
- LeetCode 453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements
- LeetCode_453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements