首页 > 代码库 > LeetCode 462. Minimum Moves to Equal Array Elements II
LeetCode 462. 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]
【思路分析】
这个题目和Minimum Moves to Equal Array Elements类似。在前面这个题目中我们变换一种求解问题的思路,把在n-1个数上加1的操作转换为在每个数上进行减一操作,直到每个数都减到最小值。在这个题目中我们的每一步操作是对数组中的一个数加1或者减1,直到所有的数相同。一个想法就是上大的数减小,小的数增加,直到他们都等于中间值。
1. 首先对数组进行排序
2. 找到中间值mid
3. 遍历数组,求nums[i]-mid的和
由于不保证数组元素个数为奇数个,因此不一定存在中间值。通用解法如下:
1. 首先对数组进行排序
2. 首尾数字两两配对,求出它们差值的和。
代码如下:
1 public class Solution { 2 public int minMoves2(int[] nums) { 3 Arrays.sort(nums); 4 int i = 0, j = nums.length - 1; 5 int count = 0; 6 while(i < j) { 7 count += nums[j--] - nums[i++]; 8 } 9 10 return count; 11 } 12 }
LeetCode 462. Minimum Moves to Equal Array Elements II
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。