leetcode 3634

📅 发布时间:2026/7/13 21:30:43 👁️ 浏览次数:
leetcode 3634
3634: 使数组平衡的最少移除数目注意大小为 1 的数组被认为是平衡的因为其最大值和最小值相等且条件总是成立。由于我们只关心剩余元素的最小值和最大值不关心元素的顺序所以可以先从小到大排序方便后续计算。枚举最大值 nums[i]那么最小值 nums[left] 必须满足 nums[left]*k nums[i]。由于排序了所以这些元素在数组中是连续的问题转化成一个标准的滑动窗口模型。如果不满足上式则把 left 加一直到满足上式。内层循环结束后用窗口长度 i−left1 更新保留元素个数的最大值maxSave。最终答案为 n−maxSave。class Solution { public: int minRemoval(vectorint nums, int k) { ranges::sort(nums); int max_save0,left0,nnums.size(); //枚举最大值 for(int i0;in;i){ while((long long)nums[left]*knums[i]) left; //滑动窗口 max_savemax(max_save,i-left1); } return n-max_save; } };tips:下面这种写法会超出时间限制。class Solution { public: int minRemoval(vectorint nums, int k) { ranges::sort(nums); int max_save0,nnums.size(); //枚举最大值 for(int in-1;i0;i--){ int left0; while((long long)nums[left]*knums[i]) left; max_savemax(max_save,i-left1); } return n-max_save; } };