You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

餐厅顾客峰值问题O(n)优化算法的正确性验证请求

餐厅顾客峰值问题:O(n)扫线算法实现验证请求

我正在研读算法相关书籍,认为可将餐厅顾客峰值问题的**扫线算法(sweep line algorithm)**优化至O(n)时间复杂度。以下是书中的扫线算法原文及我的C++实现代码,恳请各位帮忙验证该方案是否正确。

书中扫线算法原文

扫线算法将问题建模为一组按排序顺序处理的事件。例如,假设我们知道某餐厅一天内所有顾客的到达和离开时间,任务是找出同一时间在店的最大顾客数。

例如,图4.7展示了一个包含A、B、C、D四位顾客的问题实例,此时同一时间在店的最大顾客数为3,出现在A到达至B离开的时间段内。为解决该问题,我们为每位顾客创建两个事件:一个到达事件和一个离开事件。随后对事件排序,并按时间顺序遍历。为找到最大顾客数,我们维护一个计数器,顾客到达时计数器加1,离开时减1,计数器的最大值即为问题答案。

图4.8展示了该示例场景中的事件:每位顾客对应两个事件,“+”表示顾客到达,“−”表示顾客离开。该算法的时间复杂度为O(n log n),因为事件排序的时间复杂度为O(n log n),扫线遍历部分为O(n)。

我的O(n)时间复杂度C++实现代码

bitset<8> eve;
// 1 for customer have arrived
// 0 for customer have left
eve[0] = eve[1] = eve[2] = eve[5] = 1;
eve[3] = eve[4] = eve[6] = eve[7];
int cnt = 0, best = 0;
for (int i = 0; i < eve.size(); ++i) {
    if (eve.test(i) == 0) {
        --cnt;
        best = max(best, cnt);
    }
    else {
        ++cnt;
        best = max(best, cnt);
    }
}
cout << best << '\n';

内容的提问来源于stack exchange,提问作者Rahul Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:01:12