RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1599656
Accepted
s0m
s0m
Asked:2024-11-13 16:30:18 +0000 UTC2024-11-13 16:30:18 +0000 UTC 2024-11-13 16:30:18 +0000 UTC

需要合并范围[关闭]

  • 772
关闭这个问题是题外话。目前不接受对此问题的答复。

仅当您在提出问题之前尝试自己解决问题时,研究问题才可以作为问题接受。请编辑问题并指出到底是什么导致您难以解决问题。例如,显示您为解决问题而编写的代码

20 小时前关闭。

改进问题

我有一个列表列表:

[[1, 2], [2, 3], [5, 8], [10, 11], [4, 6]]

有必要比较元素,并在范围相交时进行并集,以便选择最大范围。

输出应该是:

[[1, 3], [4, 8], [10, 11]]
python
  • 3 3 个回答
  • 44 Views

3 个回答

  • Voted
  1. Best Answer
    splash58
    2024-11-13T17:20:49Z2024-11-13T17:20:49Z
    def gen(lst):
        if len(lst) < 1:
            return
        if len(lst) < 2:
            yield lst[0]
    
        lst = sorted(lst, key=lambda x: (x[0], x[1]))  # сортируете список
        print(lst)
        x = lst[0][0]  # начальная точка 
        y = lst[0][1]  # конечная точка
        for i in lst[1:]:
            if i[0] <= y:  # если в следующем списке начало равно или меньше конца предыдущего
                y = i[1]   # заменяем конец
            else:
                yield [x, y]  # отдаем интервал
                x = i[0]      # переопределяем начало  и конец   
                y = i[1]
    
        yield [x,y]
        return
    
    lst = [[1, 2], [2, 3], [5, 8], [10, 11], [4, 6]]
    
    res = []
    for i in gen(lst):
        res.append(i)
    print(res)  #  [[1, 3], [4, 8], [10, 11]]
    
    • 1
  2. CrazyElf
    2024-11-13T16:42:06Z2024-11-13T16:42:06Z
    • 将第一个列表元素添加到新列表中
    • 对于剩余的元素,遍历新列表并查找该范围是否与现有的不相交
    • 如果相交,则将其与现有的合并
    • 如果不相交,则将其添加到新列表中
    • 如果在列表处理期间存在连接,那么您将需要使用新列表再次运行此算法,因为可能会出现其他连接
    • 当连接结束时,算法结束

    O(n^2) 不好(甚至 O(n^3)),需要优化。也许按第一个元素和第二个元素对列表进行排序会有所帮助,再加上“双指针方法”来绕过它们;这里我们需要进一步思考。

    • 0
  3. MBo
    2024-11-13T17:08:34Z2024-11-13T17:08:34Z

    将范围的所有末端添加到对列表中[значение, признак +1/-1 для начала или конца соответственно]

    对列表进行排序

    启动活动范围计数器

    迭代列表,将该对的第二个字段添加到计数器中。

    如果计数器从0变成1,那么新的组合范围已经开始,记住开始

    如果计数器从1变成0,那么新的组合范围已经结束,将其添加到结果中

    排序导致的复杂度为 O(nlogn)

    默认排序会导致如果值相同则结束点先于开始点处理,因此 [0,1] 和 [1,2] 不会合并。如果需要,则可以将符号反转(-1/+1),并在通过时从计数器中减去它。

    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5