思路:
由于题目保证:一定能变得与tagert相似。因此将题目进行简化成+1 -1的形式,由于两个数组元素和相等,因此最小和最小的匹配,次小的两个匹配…。回到原问题,那么+2 -2怎么做呢?+2 -2并不会改变奇偶性,因此最小奇两个匹配,次小奇匹配,偶数同理。由于+2 -2每次变化量为4,因此ans/4为结果。
class Solution {
public:
long long makeSimilar(vector<int>& nums, vector<int>& target) {
sort(nums.begin(), nums.end());
sort(target.begin(), target.end());
int idx[2] = {0};
int n = nums.size();
long long ans = 0;
for (int i = 0; i < n; ++i) {
int index = nums[i] % 2;
int& jo = idx[index]; //技巧,直接用引用能简化代码
while (target[jo] % 2 != index) jo++;
ans += abs(target[jo] - nums[i]);
jo++;
}
return ans / 4;
}
};