Minimum Moves to Equal Array Elements II最小移动步数问题解法详解
来源:互联网 发布:3d雕塑软件 编辑:程序博客网 时间:2024/06/03 08:36
问题详见: Minimum Moves to Equal Array Elements II
题目是给出一个非空整数数组,将他们以最少的移动步数变成元素全等的整数数组。题目描述如下:
Given a non-empty integer array, find the minimum number of moves required to make all array elements equal, where a move is incrementing a selected element by 1 or decrementing a selected element by 1.
You may assume the array’s length is at most 10,000.
Example:
Input: [1,2,3]
Output: 2
Explanation: Only two moves are needed (remember each move increments
or decrements one element):
[1,2,3] => [2,2,3] => [2,2,2]
解题思路:
一开始如果按照找平均数然后计算的结果并非正确,这是由于类似[1,0,0,8,6]这样的数其平均数为3,按平均数移动需要2+3+3+5+3=16步,然而如果按照中位数1的话则只需0+1+1+7+5=14步,所以该题是按照中位数计算最小移动步数。所以只需查找到中位数即可很方便求出答案,整个算法复杂度为
class Solution {public: int minMoves2(vector<int>& nums) { int n = nums.size(); auto it = nums.begin() + n/2; nth_element(nums.begin(), it, nums.end()); int median = *it; int total = 0; for (auto &i : nums) total += abs(i-median); return total; }};
其提交运行结果如下:
0 0
- Minimum Moves to Equal Array Elements II最小移动步数问题解法详解
- Minimum Moves to Equal Array Elements II问题及解法
- 453. Minimum Moves to Equal Array Elements | 计算步数
- Minimum Moves to Equal Array Elements问题及解法
- Minimum Moves to Equal Array Elements II
- Minimum Moves to Equal Array Elements II
- Minimum Moves to Equal Array Elements II
- leetcode_462. Minimum Moves to Equal Array Elements II 移动最小步数使数组各数字相等II,中位数法
- 453. Minimum Moves to Equal Array Elements的C++解法
- 【leetcode】462. Minimum Moves to Equal Array Elements II【M】
- 462. Minimum Moves to Equal Array Elements II
- 462. Minimum Moves to Equal Array Elements II
- LeetCode462. Minimum Moves to Equal Array Elements II
- Leetcode 之 Minimum Moves to Equal Array Elements II
- [LeetCode]Minimum Moves to Equal Array Elements II(Java)
- LeetCode 462. Minimum Moves to Equal Array Elements II
- leetcode 462 Minimum Moves to Equal Array Elements II C++
- 【LeetCode-462】Minimum Moves to Equal Array Elements II
- 2017百度实习生招聘编程题
- Mybatis高级应用(下)
- GitHub 项目徽章的添加和设置
- Java中堆和栈创建对象的区别
- IM即时通讯实现原理
- Minimum Moves to Equal Array Elements II最小移动步数问题解法详解
- 计算机网络 -- 网络层
- Andriod Studio设置代码完成(忽略大小写自动联想提示);
- Java 堆内存 深入详解
- [Guava源码日报](7)Throwables分析
- 页分配器
- 字符串哈希函数
- linux入门
- Angular2.0视频教程来了!