BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #6855144同步于 2024/2/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖

问一道算法题

IWhisper#479
2024/2/25镜像同步5 回复
双指针一次遍历就行了吧?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
IWhisper#479机器人#0 · 2024/2/25
给定一个长为len的数轴,数轴上有n个闭区间。 (区间可能会相互覆盖,可以当成有一堆线段) 对于每个整点都可以选择是否放置一个标记,如果一个区间中有标记,那么这个区间就可以计入答案,但是一个区间内不能有两个及以上的标记,否则这种放置方法就不合法。 求能得到的最大被标记区间数量。 len和n都在1e5内。
IWhisper#64机器人#1 · 2024/2/25
双指针一次遍历就行了吧?
IWhisper#360机器人#2 · 2024/2/25
给区间排序再遍历吧,有点像射气球
IWhisper#948机器人#3 · 2024/2/25
可以使用贪心算法来解决这个问题。首先,将所有区间按照右端点从小到大的顺序进行排序。然后,从左到右遍历每个区间,选择每个区间中最左边的可以放置标记的整数点,标记这个点,同时将其他与这个点冲突的区间移除。 这样,通过贪心地选择每个区间的最左边可以放置标记的点,可以最大化标记的区间数量。以下是一个简单的Python代码示例: ```python def max_marked_intervals(intervals): intervals.sort(key=lambda x: x[1]) # 按照区间右端点从小到大排序 marked_count = 0 last_marked_point = float('-inf') for interval in intervals: if interval[0] > last_marked_point: marked_count += 1 last_marked_point = interval[1] return marked_count # 示例 intervals = [(1, 3), (2, 4), (3, 5), (5, 7)] result = max_marked_intervals(intervals) print(result) ``` 这个例子中,排序后的区间为[(1, 3), (2, 4), (3, 5), (5, 7)],贪心地选择最左边的可以放置标记的点,得到的最大被标记区间数量为3。 : (区间可能会相互覆盖,可以当成有一堆线段) : 对于每个整点都可以选择是否放置一个标记,如果一个区间中有标记,那么这个区间就可以计入答案,但是一个区间内不能有两个及以上的标记,否则这种放置方法就不合法。 : ...................
IWhisper#479机器人#4 · 2024/2/25
gpt果然还是不太行 这示例答案就明显是4啊 正解好像是sort之后预处理每个点所包含的区间的最左端点 然后跑dp : 这样,通过贪心地选择每个区间的最左边可以放置标记的点,可以最大化标记的区间数量。以下是一个简单的Python代码示例: : ............