zoukankan      html  css  js  c++  java
  • leetcode56之合并区间

    题目描述:

    给出一个区间的集合,请合并所有重叠的区间。

    示例:

    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]
     
    代码如下:
     1 def merge(intervals):
     2     '''
     3 
     4     :param intervals:
     5     :return
     6     '''
     7     # 根据区间左端点排序
     8     intervals.sort(key=lambda x: x[0])
     9     if intervals:
    10         res = [intervals[0]]
    11     else:
    12         return intervals
    13     for i in range(1, len(intervals)):
    14         # 可以合并
    15         if (intervals[i][-1] - intervals[i][0] + res[-1][-1] - res[-1][0]) 
    16                 >= intervals[i][-1] - res[-1][0]:
    17             res[-1] = [res[-1][0], max(intervals[i][-1], res[-1][-1])]
    18         # 不能合并,将intervals当前值放入res中
    19         else:
    20             res.append(intervals[i])
    21 
    22     return res
    23 
    24 
    25 print('--------测试merge()---------')
    26 A = [[1, 2], [0, 6], [7, 9], [10, 18]]
    27 B = []
    28 res = merge(B)
    29 print("res=", res)
    30 
    31 
    32 def merge1(intervals):
    33     '''
    34 
    35     :param intervals:
    36     :return:
    37     '''
    38     intervals.sort(key=lambda x: x[0])
    39     res = []
    40     for item in intervals:
    41         # 如果res为空
    42         if not res:
    43             res.append(item)
    44         else:
    45             # 可以合并
    46             if item[0] <= res[-1][1]:
    47                 res[-1][1] = max(item[1], res[-1][1])
    48             # 不能合并
    49             else:
    50                 res.append(item)
    51 
    52     return res
    53 
    54 
    55 print("=============测试merge1()==============")
    56 result = merge1(A)
    57 print("result=", result)

    输出:

    --------测试merge()---------
    res= []
    =============测试merge1()==============
    result= [[0, 6], [7, 9], [10, 18]]

    一点思考:

    本题在解答过程中重点考察了二维数组索引求值。另外一点,当遇到循环比较数组(列表)前后两元素数值时,可以定义一个空的列表,用来动态存放数组中另一个待比较元素,这样实现起来更方便。当放入第一个元素时,采用方法二明显更方便一点,值得借鉴。方法一稍显得麻烦一点。

  • 相关阅读:
    unity3d工具栏介绍
    初识unity3d
    js模拟表单提交
    配置Appium环境
    html单选框 bootstrap模态框里面的单选框 和jq取值
    解决输入框总被浏览器记住的记录遮挡住的问题
    U盘
    python 字典列表/列表套字典 去重重复的字典数据
    ajax把数据return出去
    js把列表转换成字符串
  • 原文地址:https://www.cnblogs.com/rounie/p/13027884.html
Copyright © 2011-2022 走看看