题目的链接在这里:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements-ii/
题目大意
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。
一、示意图
二、解题思路
想都不要想 按照自己的思路 就是选的中位数
中位数
代码如下:
class Solution {
public int minMoves2(int[] nums) {
//想都不要想 按照自己的思路 就是选的中位数 但是需要有两种可能吧 如果单数的话 那就是那个中位数
//可是如果是双数的话 就需要进行判断了 先进行边界判断
if(nums==null)
return 0;
int len=nums.length;
if(len==1)
return 0;
//果然要进行排序
Arrays.sort(nums);
if(len==2){
//姑且认为 是从小到大排的
//是在不行 先进行排序
return nums[1]-nums[0];
}
int result=0;
//然后进行判断 是双数还是单数 好像都不用判断了
//说明是双数 那是不是需要排除那个位置到底是哪一个呢 还是不太一样的 甚至都不知道是前面一个还是后面一个
//啊好像是一样的 那就按照那个吧
int index=len/2;
for(int i=0;i<len;i++){
if(i<=index){
result+=(nums[index]-nums[i]);
}
else{
result+=(nums[i]-nums[index]);
}
}
return result;
}
}