-
发表于 2026.02.07
-
从左到右枚举所有的“分割点”,计算在该点处为了达成“左侧全是
'a'、右侧全是'b'”的状态所需要删除的字符总数(即:左侧的'b'数量 + 右侧的'a'数量),求最小值即可。需要两次遍历:第一次遍历统计整个字符串中两个字符的数量;第二次遍历用于维护左(左侧已遍历的字符数量,可以计算右侧的字符数量)枚举右(分割点)。class Solution { public: int minRemoval(vector<int>& nums, int k) { std::sort(nums.begin(), nums.end()); int left = 0, right = 0; int max_window = 0; for (left = 0; left < nums.size(); ++left) { while (right < nums.size() && nums[right] <= k * static_cast<unsigned long long>(nums[left])) { ++right; } max_window = max(max_window, right - left); } return nums.size() - max_window; } }; - LC 题目链接
-