【Leetcode】Insert Interval
来源:互联网 发布:千牛保证金是淘宝的吗 编辑:程序博客网 时间:2024/06/03 19:57
题目:
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9]
, insert and merge [2,5]
in as [1,5],[6,9]
.
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16]
, insert and merge [4,9]
in as [1,2],[3,10],[12,16]
.
This is because the new interval [4,9]
overlaps with [3,5],[6,7],[8,10]
.
其实这题跟之前对区间的合并非常相似,可以当作先给整体区间进行元素的添加,然后再进行区间的合并。
Java版本:
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */class Solution { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { int n = intervals.size() + 1; int[] starts = new int[n]; int[] ends = new int[n]; intervals.add(newInterval); for(int i = 0; i < n; i++){ starts[i] = intervals.get(i).start; ends[i] = intervals.get(i).end; } Arrays.sort(starts); Arrays.sort(ends); List<Interval> res = new ArrayList<Interval>(); for( int i=0, j = 0; i < n; i++){ if( i == n - 1 || starts[i+1] > ends[i] ){ res.add(new Interval(starts[j], ends[i])); j = i + 1; } } return res; }}
# Definition for an interval.# class Interval:# def __init__(self, s=0, e=0):# self.start = s# self.end = eclass Solution: def insert(self, intervals, newInterval): """ :type intervals: List[Interval] :type newInterval: Interval :rtype: List[Interval] """ if len(intervals) == 0 : return []; intervals.append(newInterval); intervals = sorted(intervals, key = lambda x : x.start) res = [intervals[0]] for n in intervals[1:] : if n.start <= res[-1].end : res[-1].end = max(n.end,res[-1].end) else: res.append(n) return res;
C++版本:
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */class Solution {public: vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) { auto compare = [] (const Interval &intv1, const Interval &intv2) { return intv1.end < intv2.start; }; auto range = equal_range(intervals.begin(), intervals.end(), newInterval, compare); auto itr1 = range.first, itr2 = range.second; if (itr1 == itr2) { intervals.insert(itr1, newInterval); } else { itr2--; itr2->start = min(newInterval.start, itr1->start); itr2->end = max(newInterval.end, itr2->end); intervals.erase(itr1, itr2); } return intervals; }};
阅读全文
0 0
- LeetCode: Insert Interval & Merge Interval
- LeetCode题目 Insert Interval
- LeetCode: Insert Interval
- LeetCode Insert Interval
- LeetCode: Insert Interval
- Leetcode: Insert Interval
- [LeetCode] Insert Interval
- LeetCode Insert Interval
- [LeetCode]Insert Interval
- leetcode insert interval
- [leetcode]Insert Interval
- LeetCode-Insert Interval
- [leetcode] Insert Interval
- LeetCode - Insert Interval
- 【leetcode】Insert Interval
- leetcode Insert Interval
- 【leetcode】Insert Interval
- LeetCode Insert Interval
- mybatis模糊查询
- oracle 中行转列详细例子和多种方法
- 获取被connect的组件的方法
- IOCP模型与网络编程
- nova中的API中的AdminActionsController入口
- 【Leetcode】Insert Interval
- java里面的运行异常与普通异常的区别以及spring boot统一异常处理
- Python简介
- java使用SimpleEmail发送邮件
- effective java--通用程序设计
- DRV_MTK
- L0、L1、L2、Elastic Net正则项
- 深入java集合系列:Vector
- jquery新手入门教学(二)