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]
struct Solution;
impl Solution {
fn min_moves2(mut nums: Vec<i32>) -> i32 {
nums.sort_unstable();
let n = nums.len();
let median = nums[n / 2];
nums.into_iter().map(|x| (x - median).abs()).sum()
}
}
#[test]
fn test() {
let nums = vec![1, 2, 3];
let res = 2;
assert_eq!(Solution::min_moves2(nums), res);
}