leetcode 462. Minimum Moves to Equal Array Elements II

来源:互联网 发布:炫舞开挂软件 编辑:程序博客网 时间:2024/06/18 11:54

原题:

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:2Explanation:Only two moves are needed (remember each move increments or decrements one element):[1,2,3]  =>  [2,2,3]  =>  [2,2,2]
代码如下:
int minMoves2(int* nums, int numsSize) {    int cmp(const void* a,const void* b)    {        return *(int*)a-*(int*)b;    }    qsort(nums,numsSize,sizeof(int),cmp);    int flag;    if(numsSize%2==0)    {        flag=numsSize/2;    }    else    {        flag=(numsSize+1)/2-1;    }    int temp=*(nums+flag);    int result=0;    for(int n=0;n<numsSize;n++)    {        if(temp>*(nums+n))        {            result+=temp-*(nums+n);        }        else        {            result+=*(nums+n)-temp;        }    }    return result;}
其实最终的思想是找中位数,然后画一个数轴就很容易证明极致点在哪里了。

原创粉丝点击