您的位置:首页 > 移动开发

【LeetCode】435.Non-overlapping Intervals(Medium)解题报告

2018-02-22 13:42 453 查看
【LeetCode】435.Non-overlapping Intervals(Medium)解题报告

题目地址:https://leetcode.com/problems/non-overlapping-intervals/description/

题目描述:

  Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.

  Note:

    You may assume the interval’s end point is always bigger than its start point.

    Intervals like [1,2] and [2,3] have borders “touching” but they don’t overlap each other.

Example 1:
Input: [ [1,2], [2,3], [3,4], [1,3] ]
Output: 1

Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.

Example 2:
Input: [ [1,2], [1,2], [1,2] ]
Output: 2

Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping.

Example 3:
Input: [ [1,2], [2,3] ]
Output: 0

Explanation: You don't need to remove any of the intervals since they're already non-overlapping.


Solution1:

/**
* 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; }
* }
*/
//time : O(nlogn)
//space : O(1)
//第一种,看剩下多少个。
//[1,2], [2,3], [3,4], [1,3]
//[1,2], [1,3], [2,3], [3,4]
class Solution {
public int eraseOverlapIntervals(Interval[] intervals) {
if(intervals.length == 0) return 0;
Arrays.sort(intervals , (a,b) -> a.end-b.end);
int end = intervals[0].end;
int count = 1;
for(int i=1 ; i<intervals.length ; i++){
if(intervals[i].start >= end ){
end = intervals[i].end;
count++;
}
}
return intervals.length - count;
}
}


Solution2:

/**
* 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; }
* }
*/
//time : O(nlogn)
//space : O(1)
//第二种,看除去多少个。
//[1,2], [2,3], [3,4], [1,3]
//[1,2], [2,3], [1,3], [3,4]
class Solution {
public int eraseOverlapIntervals(Interval[] intervals) {
if(intervals.length == 0) return 0;
Arrays.sort(intervals , new Comparator<Interval>(){
public int compare(Interval o1 ,Interval o2){
if(o1.end != o2.end) return o1.end - o2.end;
return o2.start - o1.start;
}
});
int end = Integer.MIN_VALUE;
int res = 0;
for(Interval interval : intervals){
if(interval.start >= end){
end = interval.end;
}else{
res++;
}
}
return res;
}
}


Date:2018年2月22日
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode array