leetcode56-合并区间

原题

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

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

解法

思想

这道题和leetcode435-无重叠区间方法有一点类似,先排序,再处理区间。

代码

Java

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length<2) return intervals;
        Arrays.sort(intervals, (array1,array2)->{
            return array1[0]-array2[0];
        });
        int lastIndex = 0;
        int cur = 1;
        List<int[]> list = new ArrayList<>();
        while(cur < intervals.length){
            //如果两个区间没有重叠部分,都保留
            if(intervals[lastIndex][1]<intervals[cur][0]){
                list.add(intervals[lastIndex]);
                lastIndex = cur;
                cur++;
            //如果两个区间重叠,合并两个区间
            }else{
                intervals[lastIndex][1] = Math.max(intervals[lastIndex][1],intervals[cur][1]);
                cur++;
            }
        }
        list.add(intervals[lastIndex]);
        int[][] ans = new int[list.size()][2];
        for(int i = 0;i<list.size();i++){
            ans[i] = list.get(i);
        }
        return ans;
    }
}

Go(2020/07/05)

func merge(intervals [][]int) [][]int {
    if len(intervals) < 2 {return intervals}
    sort.Slice(intervals, func(i, j int) bool {
        return intervals[i][0]<intervals[j][0]
    })
    lastIndex := 0
    cur := 1
    var list [][]int
    for cur < len(intervals){
        if intervals[lastIndex][1]<intervals[cur][0]{
            list = append(list, intervals[lastIndex])
            lastIndex = cur
            cur++
        }else{
            intervals[lastIndex][1] = int(math.Max(float64(intervals[lastIndex][1]), float64(intervals[cur][1])))
            cur++
        }
    }
    list = append(list, intervals[lastIndex])
    return list
}

Python(2020/07/05)

class Solution(object):
    def merge(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: List[List[int]]
        """
        if len(intervals) < 2: return intervals
        intervals = sorted(intervals, key=lambda e: e[0])
        lastIndex = 0
        cur = 1
        list = []
        while cur < len(intervals):
            if intervals[lastIndex][1] < intervals[cur][0]:
                list.append(intervals[lastIndex])
                lastIndex = cur
                cur += 1
            else:
                intervals[lastIndex][1] = max(intervals[lastIndex][1], intervals[cur][1])
                cur += 1
        list.append(intervals[lastIndex])
        return list

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode56-%e5%90%88%e5%b9%b6%e5%8c%ba%e9%97%b4/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年4月15日
下一篇 2020年4月16日

相关推荐

  • leetcode82-删除排序链表中的重复元素II

    原题 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示…

    算法 2020年5月31日
    0240
  • leetcode84-柱状图中最大的矩形

    原题 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽…

    2020年1月24日
    0100
  • leetcode200-岛屿数量

    原题 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水…

    算法 2019年11月24日
    0150
  • leetcode680-验证回文字符串II

    原题 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解…

    算法 2020年5月19日
    0290
  • leetcode62-不同路径

    原题 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Fi…

    2020年2月21日
    0370
  • leetcode836-矩形重叠

    原题 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。 如果相交的面积为正,则称两矩形重叠。需要…

    算法 2020年3月18日
    0450
  • leetcode66-加一

    原题 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以…

    算法 2019年11月14日
    0140
  • 十大排序算法与Java实现

    本文参考资源: https://github.com/iTimeTraveler/SortAlgorithms 十大经典排序算法 - 冰狼爱魔 - 博客园 十大经典排序算法总结(J…

    2020年3月11日
    0800
  • leetcode279-完全平方数

    原题 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出…

    2019年12月11日
    0150
  • leetcode260-只出现一次的数字III

    原题 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。 示例: 输入: [1,2,1,3,2,5] 输出: [3,5…

    算法 2020年4月28日
    0150

发表回复

登录后才能评论