algorithm - 找到一个有效的算法来得到一条线
问题描述
给定n个水平线段,其中每个线段的范围是x2 - x1,我应该应用什么算法来获得一条直线,使我获得最大的组合范围(与线段的每个交叉点都增加了该线段的范围),就像发现一条要钻的线,以获得最大量的水(水代表具有 X2-X1 数量的段)我以令人沮丧的大 O (n^4)完成了蛮力算法
解决方案
我将假设没有从另一个结尾开始的段,如果没有,则需要修改以下内容:
- 对于每个段,创建 2 个元组:(x1, index) 和 (x2, index)
- 按元组的第一个值对元组进行排序
- 设置最佳 = 0
- 迭代元组。如果它是起点(以前没有见过索引),则将其值 (x2 - x1) 添加到最佳值。如果它是一个端点,则将其值减去最佳值。
- 问题的答案将是最好达到的最高值。
复杂度:O(n log n)
推荐阅读
- json - 解析带有正则表达式的json时Perl内存不足
- azure - Azure Function 2.0 依赖注入错误
- python - Pandas:Usecols 与列不匹配,列预期但未找到
- python - 卡在codio中的可变长度记录
- css - 设置特定颜色类型的表格单元格
- postgresql - 带有 GSSAPI 的 postgreSQl 12 身份验证
- c - 在 C shmget 中查找共享内存的大小
- java - 我不断收到错误“索引 5 超出长度 5 的范围”但不知道要更改什么
- xpath - 如何将网站图形数据导入谷歌表格
- asp.net-web-api - 如何在 Asp.Net 中的页面之间传递模型 ID