使库存平衡的最小丢弃次数
3679. 使库存平衡的最少丢弃次数 - 力扣(LeetCode)
Solution
这题的思路倒是挺直接的,定长滑动窗口就可以,但是做的时候犯了一个错误,如果一个元素在进窗口的时候就被丢弃了,那么当这个下标出窗口的时候,不应该再把它的频率减一。
正确的做法是,如果一个元素在进入窗口的时候被丢弃了,那么就把这个位置的元素置为0,这样就不会影响后面出窗口的效果了。
因为出窗口是将这个下标的元素的频率减1,但是前提是这个元素在窗口中,如果一开始就被丢弃了,那再把它的频率减一,就会导致错误。
class Solution {
public:int minArrivalsToDiscard(vector<int>& arrivals, int w, int m) {int n = arrivals.size();int ans = 0;unordered_map<int, int> table;for (int r = 0; r < n; ++r) {// table[arrivals[r]]++;if (table[arrivals[r]] == m) {ans++;arrivals[r] = 0;} else {table[arrivals[r]]++;}int l = r - w + 1;if (l < 0)continue;table[arrivals[l]]--;}return ans;}
};