LeetCode 462. Minimum Moves to Equal Array Elements II

Posted Black_Knight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

462 Minimum Moves to Equal Array Elements II 最少移动次数使数组元素相等 II

462. Minimum Moves to Equal Array Elements II

462. Minimum Moves to Equal Array Elements II

[Math_Medium]462. Minimum Moves to Equal Array Elements II

462. Minimum Moves to Equal Array Elements II 最小移动到等数组元素II

leetcode462