【LeetCode】Merge Intervals && Insert Interval
来源:互联网 发布:詹姆斯每个赛季数据 编辑:程序博客网 时间:2024/05/29 06:39
1、Merge Intervals
Total Accepted: 6989 Total Submissions: 34958 My Submissions
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
注意给的区间可能是无序的,先排序后处理。
基本的思路还是比较合并吧,比较考察思维逻辑,注意边界处理。
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].
求解给定的区间在已知区间的位置,将给定区间放入已知区间,然后就回到1的处理方式。
Total Accepted: 6989 Total Submissions: 34958 My Submissions
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
注意给的区间可能是无序的,先排序后处理。
基本的思路还是比较合并吧,比较考察思维逻辑,注意边界处理。
Java AC
/** * 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; } * } */public class Solution { public ArrayList<Interval> merge(ArrayList<Interval> intervals) { if(intervals == null){ return intervals; } int size = intervals.size(); if(size == 0 || size == 1){ return intervals; } Collections.sort(intervals, new Comparator<Interval>() {public int compare(Interval o1, Interval o2) {if (o1.start == o2.start) {return o1.end - o2.end;}return o1.start - o2.start;}}); ArrayList<Interval> list = new ArrayList<Interval>(); Interval interval = intervals.get(0); int start = interval.start; int end = interval.end; for(int i = 1; i < size; i++){ Interval intval = intervals.get(i); if(intval.start <= end){ int tempSize = list.size(); if (tempSize > 0) { list.remove(tempSize-1);} start = Math.min(start, intval.start); end = Math.max(end, intval.end); }else{ if (i == 1) { list.add(new Interval(start, end));} start = intval.start; end = intval.end; } list.add(new Interval(start, end)); }return list; }}2、Insert Interval Total Accepted: 6691 Total Submissions: 33506 My Submissions
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].
求解给定的区间在已知区间的位置,将给定区间放入已知区间,然后就回到1的处理方式。
Java AC
/** * 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; } * } */public class Solution { public ArrayList<Interval> insert(ArrayList<Interval> intervals,Interval newInterval) {ArrayList<Interval> list = new ArrayList<Interval>();if (intervals == null || intervals.size() == 0) {list.add(newInterval);return list;}int pos = searchInsert(intervals, newInterval.start);return merge(intervals, pos, newInterval);}public ArrayList<Interval> merge(ArrayList<Interval> intervals, int pos, Interval newInterval) { if(intervals == null){ return intervals; } int size = intervals.size(); ArrayList<Interval> newList = new ArrayList<Interval>(); if (pos == 0) {newList.add(newInterval);newList.addAll(intervals);}else if (pos == size) {newList.addAll(intervals);newList.add(newInterval);}else {int i = 0;while (i < size) {if (i == pos) {newList.add(newInterval);}newList.add(intervals.get(i));i++;}} return merge(newList); }public ArrayList<Interval> merge(ArrayList<Interval> intervals) { int size = intervals.size(); ArrayList<Interval> list = new ArrayList<Interval>(); Interval interval = intervals.get(0); int start = interval.start; int end = interval.end; for(int i = 1; i < size; i++){ Interval intval = intervals.get(i); if(intval.start <= end){ int tempSize = list.size(); if (tempSize > 0) { list.remove(tempSize-1);} start = Math.min(start, intval.start); end = Math.max(end, intval.end); }else{ if (i == 1) { list.add(new Interval(start, end));} start = intval.start; end = intval.end; } list.add(new Interval(start, end)); }return list; }public int searchInsert(ArrayList<Interval> intervals, int target) {int size = intervals.size();if (target < intervals.get(0).start) {return 0;}if (target > intervals.get(size - 1).end) {return size;}int low = 0;int high = size - 1;int mid = 0;while (low <= high) {mid = (low + high) >> 1;if (intervals.get(mid).start > target) {high = mid - 1;} else if (intervals.get(mid).start < target) {low = mid + 1;} else {return mid;}}return low;}}
0 0
- [LeetCode] Merge Intervals、Insert Interval:
- 【LeetCode】Merge Intervals && Insert Interval
- leetcode Merge Intervals & Insert Interval
- 【LeetCode】Merge Intervals && Insert Interval
- [LeetCode]Merge Intervals && Insert Interval
- LeetCode 57. Insert Interval/56. Merge Intervals
- Leetcode 56. Merge Intervals & 57. Insert Interval
- Merge Intervals And Insert Interval -- Leetcode
- leetcode 56. Merge Intervals 57. Insert Interval
- Merge Intervals & Insert Interval
- Merge Intervals && Insert Interval
- Leetcode 56. Merge Intervals && 57. Insert Interval(Hard)
- LeetCode: Insert Interval & Merge Interval
- 56/57. Merge Intervals; Insert Interval
- 57. Insert Interval & 56. Merge Intervals
- 56-Merge Intervals && 57-Insert Interval
- 56. Merge Intervals && 57. Insert Interval
- LeetCode题解:Merge/Insert Interval
- Ubuntu操作系统学习笔记之-----文件基本操作管理
- autoconf 和 automake 生成 Makefile 文件
- Chrome插件开发之制作豆瓣电台歌词
- android 布局中 layout_gravity、gravity、orientation、layout_weight
- CSS 样式
- 【LeetCode】Merge Intervals && Insert Interval
- 一直在路上
- windows函数钩子实现
- throw 和 throws 的区别
- BNU10782被诅咒的代码
- hdu 1575(矩阵快速幂)
- Twenty-four
- 01背包问题2
- PowerDesigner15/16中 Inheritance、Association、Association Link无法使用的解决