面试题|3-11美团笔试流星那题
7513
2023.03.11
发布于 未知归属地

时间限制: 3000MS
内存限制: 589824KB
题目描述:
小美是一位天文爱好者,她收集了接下来一段时间中所有会划过她所在的观测地上空的流星信息。具体地,她收集了n个流星在她所在观测地上空的出现时刻和消失时刻。对于一个流星,若其的出现时刻为s,消失时刻为t,那么小美在时间段[s, t]都能够观测到它。对于一个时刻,观测地上空出现的流星数量越多,则小美认为该时刻越好。小美希望能够选择一个最佳的时刻进行观测和摄影,使她能观测到最多数量的流星。现在小美想知道,在这个最佳时刻,她最多能观测到多少个流星以及一共有多少个最佳时刻可供她选择。

输入描述
第一行是一个正整数n,表示流星的数量。

第二行是n个用空格隔开的正整数,第i个数si表示第i个流星的出现时间。

第三行是n个用空格隔开的正整数,第i个数ti表示第i个流星的消失时间。

1<=n<=100000, 1<=si<=ti<=10^9

输出描述
输出一行用空格隔开的两个数x和y,其中x表示小美能观测到的最多流星数,y表示可供她选择的最佳时刻数量。

只能过55%, 有人能给指点一下吗? 是存在什么特殊用例吗? 还是我的思路就是错的

n = int(input())
starts = list(map(int, input().split(" ")))
ends = list(map(int, input().split(" ")))
arr = []
for s, e in zip(starts, ends):
    arr.append((s, 1))
    arr.append((e, -1))
arr.sort(key=lambda x: (x[0], -x[1]))
maxC = 0
cur, res = 0, 0
l = 0
# print(arr)
pre = 0
for t, d in arr:
    cur += d
    if cur > maxC:
        maxC = cur
        l = t
        res = 0
    elif cur == maxC - 1:
        res += (t - l + 1)
    elif cur == maxC:
        l = t
print(f'{maxC} {res}')
评论 (37)