leetcode:(435) Non-overlapping Intervals(java)

题目:

    

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:

  1. You may assume the interval's end point is always bigger than its start point.
  2. 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.

题目描述:

      给定一个区间数组,计算其中区间重叠数组的数量。

解题思路:

    将数组按照区间尾值大小进行排序,然后找出最多能组成区间不重叠数组的数量,用总的区间个数减去最多区间不重叠数组的数量即为所求的区间重叠数组数量。具体思路及代码如下:

import java.util.Arrays;
import java.util.Comparator;

public class GreedyThought_EraseOverLapIntervals_435_1108 {
    public int eraseOverLapIntervals(Interval[] intervals) {
        //判空
        if (intervals == null || intervals.length == 0) {
            return 0;
        }

        //将区间按照区间末尾的值进行升序排序
        Arrays.sort(intervals, Comparator.comparingInt(o -> o.end));
        int end = intervals[0].end;
        int count = 1; //第一个区间计入不重复区间
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i].start < end) {
                continue;
            }
            end=intervals[i].end;
            count++;
        }

        //区间的总个数减去不重复区间的个数即为所求个数
        return intervals.length - count;
    }
}

猜你喜欢

转载自blog.csdn.net/Sunshine_liang1/article/details/83857221
今日推荐