LeetCode056 Merge Intervals
来源:互联网 发布:mac openssl devel 编辑:程序博客网 时间:2024/05/18 02:09
详细见:leetcode.com/problems/merge-intervals
Java Solution: github
package leetcode;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.TreeSet;public class P056_MergeIntervals {/* * 14 ms * 74.70% */static class Solution2 {List<Interval> ans = new LinkedList<Interval>(); public List<Interval> merge(List<Interval> intervals) { if (intervals == null || intervals.size() == 0) return ans; HashMap<Integer, Interval> map = new HashMap<Integer, Interval>(); Iterator<Interval> it = intervals.iterator(); while (it.hasNext()) { Interval temp = it.next(); if (! (map.containsKey(temp.start) && map.get(temp.start).end >= temp.end)) map.put(temp.start, temp); } int end_pre = 0; Interval last = null; TreeSet<Integer> set = new TreeSet<Integer>(map.keySet()); for (int start : set) { Interval cur = map.get(start); if (last == null) { last = cur; end_pre = last.end; } else { if (cur.start <= end_pre) { end_pre = Math.max(end_pre, cur.end); } else { last.end = end_pre; ans.add(last); last = cur; end_pre = Math.max(end_pre, cur.end); } } } last.end = end_pre; ans.add(last); return ans; }}static class Interval {int start;int end;Interval() { start = 0; end = 0; }Interval(int s, int e) { start = s; end = e; }}}
C Solution: github
/* url: leetcode.com/problems/merge-intervals/ AC 9ms 45.83%*/#include <stdio.h>#include <stdlib.h>typedef struct Interval si;struct Interval { int start; int end;};int cmp(si i, int start, int end) { if (i.start < start) { return -1; } else if (i.start > start) { return 1; } if (i.end > end) { return -1; } else if (i.end < end) { return 1; } return 0;}//[i, j)int partition(si* n, int i, int j) { int save_start = 0, save_end = 0; j --; save_start = n[i].start; save_end = n[i].end; while (i < j) { while (i < j && cmp(n[j], save_start, save_end) >= 0) j --; n[i].start = n[j].start; n[i].end = n[j].end; while (i < j && cmp(n[i], save_start, save_end) <= 0) i ++; n[j].start = n[i].start; n[j].end = n[i].end; } n[i].start = save_start; n[i].end = save_end; return i;}//[i, j)void quick_sort(si* n, int i, int j) { int p = 0; if (i + 1 < j) { p = partition(n, i, j); quick_sort(n, i, p); quick_sort(n, p+1, j); }}si* merge(si* n, int nn, int* rn) { int s = 0, e = 0, i = 0, ai = 0; if (nn == 0) return NULL; quick_sort(n, 0, nn); s = n[0].start; e = n[0].end; for (i = 1; i < nn; i ++) { if (e < n[i].start) { n[ai].start = s; n[ai].end = e; ai ++; s = n[i].start; e = n[i].end; } else { e = e > n[i].end ? e : n[i].end; } } n[ai].start = s; n[ai].end = e; ai ++; *rn = ai; return n;}int main() { si n[5]; int i = 0; int rn = 0; si* ans = NULL; n[0].start = 15; n[0].end = 18; n[1].start = 8; n[1].end = 10; n[2].start = 2; n[2].end = 6; n[3].start = 1; n[3].end = 3; n[4].start = 100; n[4].end = 200; ans = merge(n, 5, &rn); for (i = 0; i < rn; i ++) { printf("start is %d end is %d\r\n", n[i].start, n[i].end); }}
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/merge-intervals @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月11日 @details: Solution: 142ms 12.46%'''class Interval(object): def __init__(self, s=0, e=0): self.start = s self.end = e def print_Interval(i): for j in range(len(i)): print("%d: %d\t%d" % (j, i[j].start, i[j].end))class Solution(object): def merge(self, i): """ :type i: List[Interval] :rtype: List[Interval] """ k, t = 0, -1 i.sort(key=lambda x: (x.start, -x.end)) while k < len(i): if t >= i[k].start: i[k-1].end = max(i[k].end,i[k-1].end) t = max(t, i[k].end) i.remove(i[k]) else: t = i[k].end k += 1 return i if __name__ == "__main__": i0 = Interval(1,4) i1 = Interval(0,2) i2 = Interval(3,5) i3 = Interval(2,3) i4 = Interval(15,18) i5 = Interval(1, 3) i = [i0, i1, i2, i3, i4, i5] i = [i0, i1, i2] print_Interval(Solution().merge(i))
0 0
- LeetCode056 Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- merge intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- 发现了cntk 2.0 rnn方面的一个bug
- 为什么黑客喜欢攻击中小互联网金融公司
- Mat与IplImage之间的转化
- 小猴子下落
- double数据的内存存储方式
- LeetCode056 Merge Intervals
- 阴阳师手游平民强力式神组合推荐
- web前端编码错误总结
- notify和wait
- 8种常见机器学习算法比较
- 关于使用极光推送报 java.lang.ClassNotFoundException: com.google.gson.Gson”错误记录
- LeetCode057 Insert Interval
- 据说年薪30万的Android程序员必须知道的帖子
- 用Spring管理的项目,在不启动服务的情况下进行测试类测试:@RunWith @ContextConfiguration