Problem: 3634. 使数组平衡的最少移除数目
思路
排序+双指针法
解题过程
left指向元素x,right右移,注意边界条件
复杂度
- 时间复杂度: O(nlogN)
- 空间复杂度: O(logN)
代码
cpp
class Solution {
public:
int minRemoval(vector<int>& nums, int k) {
int n=nums.size();
sort(nums.begin(),nums.end());//对数组nums排序
int ans=n,right=0;//定义并初始化最小移除数目ans和右指针right
for(int left=0;left<n;++left){//左指针left遍历整个数组
while(right<n&&nums[right]<=static_cast<long long>(nums[left])*k){
++right;
}//而右指针right不断向右移动,直到指向第一个严格大于nums[left]的元素,或者超出数组边界为止。
ans=min(ans,n-(right-left));//更新ans的值
}
return ans;
}
};