使库存平衡的最少丢弃次数

用哈希表统计当前窗口内每种物品的保留次数; 遍历每天的物品: 先尝试保留当前物品,若保留后该物品次数超过m,则丢弃 当遍历天数超过w时,滑动窗口左边界,移除i-w+1天的物品,减少其计数。

class Solution {
public:
    int minArrivalsToDiscard(vector<int>& arrivals, int w, int m) {
        int ans = 0;
        unordered_map<int, int> cnt; // 统计当前窗口内每种物品的保留次数
        
        for (int i = 0; i < arrivals.size(); i++) {
            int &x = arrivals[i];
            cnt[x]++; // 先尝试保留当前物品,计数+1
            
            // 若当前物品在窗口内的次数超过m,必须丢弃
            if (cnt[x] > m) {
                cnt[x]--; 
                x = 0;    // 标记为丢弃
                ans++;    // 丢弃次数+1
            }
            if (i < w - 1) {
                continue;
            }
            // 滑动窗口左边界:移除w天前的物品计数
            cnt[arrivals[i - w + 1]]--;
        }
        return ans;
    }
};

时间复杂度: O(n)

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务