Leetcode——453. Minimum Moves to Equal Array Elements
来源:互联网 发布:centos vi 保存退出 编辑:程序博客网 时间:2024/05/21 19:24
题目
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:3Explanation: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; }};
0 0
- Leetcode——453. Minimum Moves to Equal Array Elements
- LeetCode——Minimum Moves to Equal Array Elements
- Leetcode Minimum Moves to Equal Array Elements
- leetcode :Minimum Moves to Equal Array Elements
- LEETCODE--Minimum Moves to Equal Array Elements
- LeetCode : Minimum Moves to Equal Array Elements
- leetcode-Minimum Moves to Equal Array Elements
- leetcode[Minimum Moves to Equal Array Elements]
- Minimum Moves to Equal Array Elements(leetcode)
- LeetCode 453. Minimum Moves to Equal Array Elements
- 【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 解题报告
- leetcode 453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements
- LeetCode 453. Minimum Moves to Equal Array Elements
- 453.[Leetcode]Minimum Moves to Equal Array Elements
- LeetCode-453. Minimum Moves to Equal Array Elements
- 最小二乘法
- 技术相关记录
- 后台学习之路(二)mysql 约束和修改数据表
- mtk fule gauge算法过程
- 模板:用双重模板参数实现 简单的 policy 类
- Leetcode——453. Minimum Moves to Equal Array Elements
- 更新一些堆栈的操作实现
- 斯坦福机器学习公开课随笔5
- OSGI企业应用开发(十三)OSGI Web应用开发(二)
- 设计模式的原则
- GreenDao 3.2.0 的基本使用
- 僵尸进程孤儿进程知识点
- android 移动数据流量打开导致获取wifi热点IP错误
- 深入浅出大数据–课本学习 two