原题:
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]
代码如下:
其实最终的思想是找中位数,然后画一个数轴就很容易证明极致点在哪里了。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; }