LeetCode Online Judge 题目C# 练习 - Insert Interval
2012-09-13 22:00
417 查看
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].
代码分析:
分6种情况:
1. [0,1] [2,3] [5,6] [8,9]
2. [2,3] [5,6] [8,9] [10,11]
3. [1, 10]
[2,3] [5,6] [8,9]
4. [1, 4]
[2,3] [5,6] [8,9]
5. [7, 10]
[2,3] [5,6] [8,9]
6. [4, 7]
[2,3] [5,6] [8,9]
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].
public struct Interval { public int start; public int end; public Interval(int s, int e) { start = s; end = e; } } public static List<Interval> InsertInterval(List<Interval> intervals, Interval newInterval) { int newS = -1; int newE = -1; List<Interval> ret = new List<Interval>(); if (intervals.Count == 0) { ret.Add(newInterval); return ret; } if (newInterval.end < intervals[0].start) { ret.Add(newInterval); foreach (var item in intervals) { ret.Add(item); } return ret; } if (newInterval.start > intervals[intervals.Count - 1].end) { foreach (var item in intervals) { ret.Add(item); } ret.Add(newInterval); return ret; } if (newInterval.start <= intervals[0].start && newInterval.end >= intervals[intervals.Count - 1].end) { ret.Add(newInterval); return ret; } if (newInterval.start <= intervals[0].start) { newS = newInterval.start; foreach (var item in intervals) { if (newInterval.end > item.end) { continue; } if (newE == -1 && newInterval.end >= item.start && newInterval.end <= item.end) { newE = item.end; ret.Add(new Interval(newS, newE)); continue; } if (newE == -1 && newInterval.end < item.start) { newE = newInterval.end; ret.Add(new Interval(newS, newE)); ret.Add(item); continue; } ret.Add(item); } return ret; } if (newInterval.end >= intervals[intervals.Count - 1].end) { newE = newInterval.end; foreach (var item in intervals) { if (newInterval.start > item.end) { ret.Add(item); continue; } if (newS == -1 && newInterval.start >= item.start && newInterval.start <= item.end) { newS = item.start; ret.Add(new Interval(newS, newE)); return ret; } if (newS == -1 && newInterval.start < item.start) { newS = newInterval.start; ret.Add(new Interval(newS, newE)); return ret; } } return ret; } foreach (var item in intervals) { if (newS == -1 && newInterval.start < item.start) { newS = newInterval.start; continue; } if (newS == -1 && newInterval.start >= item.start && newInterval.start <= item.end) { newS = item.start; continue; } if (newS == -1 && newInterval.start > item.end) { ret.Add(item); } if (newInterval.end > item.end) { continue; } if (newE == -1 && newInterval.end >= item.start && newInterval.end <= item.end) { newE = item.end; ret.Add(new Interval(newS, newE)); continue; } if (newE == -1 && newInterval.end < item.start) { newE = newInterval.end; ret.Add(new Interval(newS, newE)); ret.Add(item); continue; } ret.Add(item); } return ret; }
代码分析:
分6种情况:
1. [0,1] [2,3] [5,6] [8,9]
2. [2,3] [5,6] [8,9] [10,11]
3. [1, 10]
[2,3] [5,6] [8,9]
4. [1, 4]
[2,3] [5,6] [8,9]
5. [7, 10]
[2,3] [5,6] [8,9]
6. [4, 7]
[2,3] [5,6] [8,9]
相关文章推荐
- LeetCode Online Judge 题目C# 练习 - 3SUM
- LeetCode Online Judge 题目C# 练习 - Sparial Matrix II
- LeetCode Online Judge 题目C# 练习 - Trapping Rain Water
- LeetCode Online Judge 题目C# 练习 - First Missing Positive
- LeetCode Online Judge 题目C# 练习 - Permutations
- LeetCode Online Judge 题目C# 练习 - Generate Parentheses
- LeetCode Online Judge 题目C# 练习 - Merge Two Sorted Lists
- LeetCode Online Judge 题目C# 练习 - Scramble String
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
- LeetCode Online Judge 题目C# 练习 - Substring with Concatenation of All Words
- LeetCode Online Judge 题目C# 练习 - Unique Binary Search Trees
- LeetCode Online Judge 题目C# 练习 - Minimum Path Sum
- LeetCode Online Judge 题目C# 练习 - Remove Nth Node From End of List
- LeetCode Online Judge 题目C# 练习 - Search Insert Position
- LeetCode Online Judge 题目C# 练习 - Sudoku Solver
- LeetCode Online Judge 题目C# 练习 - Jump Game II
- LeetCode Online Judge 题目C# 练习 - Merge Intervals
- LeetCode Online Judge 题目C# 练习 - Swap Nodes in Pairs
- LeetCode Online Judge 题目C# 练习 - Balanced Binary Tree