[leetcode]462. Minimum Moves to Equal Array Elements II
Analysis
new plan~—— [好好养生啊!!]
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.
先对数组进行排序,然后去排序后的中间两个数,修改后的数组必然是这两个数中的一个,然后取修改小的就行了~
Implement
class Solution {
public:
int minMoves2(vector<int>& nums) {
int len = nums.size();
sort(nums.begin(), nums.end());
int t1 = nums[len/2];
int t2 = nums[len/2+1];
double sum1 = 0; //记得用double型,不然会越界
double sum2 = 0;
for(int i=0; i<len; i++){
sum1 += abs(t1-nums[i]);
sum2 += abs(t2-nums[i]);
}
return min(sum1, sum2);
}
};