返回信息流双指针一次遍历就行了吧?
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #6855144同步于 2024/2/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
问一道算法题
IWhisper#479
2024/2/25镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
给定一个长为len的数轴,数轴上有n个闭区间。
(区间可能会相互覆盖,可以当成有一堆线段)
对于每个整点都可以选择是否放置一个标记,如果一个区间中有标记,那么这个区间就可以计入答案,但是一个区间内不能有两个及以上的标记,否则这种放置方法就不合法。
求能得到的最大被标记区间数量。
len和n都在1e5内。
可以使用贪心算法来解决这个问题。首先,将所有区间按照右端点从小到大的顺序进行排序。然后,从左到右遍历每个区间,选择每个区间中最左边的可以放置标记的整数点,标记这个点,同时将其他与这个点冲突的区间移除。
这样,通过贪心地选择每个区间的最左边可以放置标记的点,可以最大化标记的区间数量。以下是一个简单的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。
: (区间可能会相互覆盖,可以当成有一堆线段)
: 对于每个整点都可以选择是否放置一个标记,如果一个区间中有标记,那么这个区间就可以计入答案,但是一个区间内不能有两个及以上的标记,否则这种放置方法就不合法。
: ...................
gpt果然还是不太行 这示例答案就明显是4啊
正解好像是sort之后预处理每个点所包含的区间的最左端点 然后跑dp
: 这样,通过贪心地选择每个区间的最左边可以放置标记的点,可以最大化标记的区间数量。以下是一个简单的Python代码示例:
: ............