最少移动次数使数组元素相等
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。
例如:
输入:
[1,2,3]
输出:
2
说明:
只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1):
[1,2,3] => [2,2,3] => [2,2,2]
排序之后,从两边往中间走,最大和最小之间的差距,是一定要填补上的,不管+1 还是 -1,所以最后都等于中位数。
1 import java.util.Arrays; 2 3 class Solution { 4 public int minMoves2(int[] nums) { 5 Arrays.sort(nums); 6 int i=0; 7 int j=nums.length-1; 8 int cnt=0; 9 while(i<j){ 10 cnt+=nums[j--]-nums[i++]; 11 } 12 return cnt; 13 } 14 }
原文地址:https://www.cnblogs.com/kexinxin/p/10280221.html
时间: 2024-11-06 20:45:30