题目
思路
通过这个题才了解到快速选择算法这个东西,快速选择算法利用了快速排序的思想,求解TopK问题的时间复杂度是O(N)
,C++库里面也提供了相应的函数。
这个题就是先找出nums
数组里面的中位数,然后让所有其他数字都变为中位数。
代码
class Solution {
public:
int minMoves2(vector<int>& nums) {
nth_element(nums.begin(), nums.begin()+nums.size()/2, nums.end());
int target = nums[nums.size()/2];
int ans = 0;
for(int x : nums) ans += abs(x-target);
return ans;
}
};