Facebook面试题 meeting rooms 求同时最多meeting room的时间

寻找最繁忙时刻
部署运行你感兴趣的模型镜像

给出会议开始和结束时间,求meeting room interval最多的时间点。返回任意一个时间即可。

  • 显然本题可以方便地使用扫描线算法解决。在扫描线段的同时保存一个时间。最终返回最多interval对应的时间即可。整个算法可以描述如下:
    1. 将meeting开始和结束的时间点分别存在list中。
    2. 对整个list按时间排序。相同的时间结束应该优先于开始。
    3. 遍历排序好的list,对同时存在的线段进行计数并记录时间。

O(nlogn)时间,O(n)空间。因为我们最多对2n个点进行了存储,排序和遍历。

算法的Java实现如下:

/**
 * Definition of Interval:
 * public class Interval {
 *  int start, end;
 *  Interval(int start, int end) {
 *      this.start = start;
 *      this.end = end;
 *  }
 * }
 */


class Point {
    int time;
    int flag;

    public Point(int time, int flag) {
        this.time = time;

        //end flag = 0, start flag = 1
        this.flag = flag;
    }

    public static Comparator<Point> PointComparator = new Comparator<Point>() {
        @Override
        public int compare(Point p1, Point p2) {
            if (p1.time == p2.time) {
                return p1.flag - p2.flag; // end has priority over start
            }
            return p1.time - p2.time;
        }
    };
}

class Solution {
    public int timeWithMostIntervals(List<Interval> meetings) {
        if (meetings == null || meetings.size() == 0) {
            return 0;
        }

        List<Point> lines = new ArrayList<meetings.size() * 2>();
        for (Interval i : meetings) {
            lines.add(i.start, 1);
            lines.add(i.end, 0);
        }

        Collections.sort(lines, Point.PointComparator);

        int ret = 0;
        int max = Integer.MIN_VALUE;
        int count = 0;
        for (int i = 0; i < lines.size(); i++) {
            if (lines.get(i).flag == 0) {
                count--;
            }
            else {
                count++;
            }

            if (count > max) {
                max = count;
                ret = lines.get(i).time;
            }
        }

        return ret;
    }
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耀凯考前突击大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值