Lintcode:1242. Non-overlapping Intervals

描述

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

 

个人思路:既然要求最少移出,那么可以确定的贪心策略就是如果发生冲突,那么移出区间更长的interval,所以先排序,如果start相同,移出end更大的那个interval;另一种情况也是这样

public int eraseOverlapIntervals(List<Interval> intervals) {
        Collections.sort(intervals, new Comparator<Interval>() {
            @Override
            public int compare(Interval o1, Interval o2) {
                return (o1.start == o2.start)?(o1.end-o2.end):(o1.start-o2.start);
            }
        });
        
        int size = intervals.size();
        for (int i = 1; i < intervals.size(); ) {
            if (intervals.get(i).start == intervals.get(i-1).start) {
                intervals.remove(i);
              
                continue;
            }

            if (intervals.get(i).start < intervals.get(i-1).end){
                if (intervals.get(i).end > intervals.get(i-1).end)
                    intervals.remove(i);
                else
                    intervals.remove(i-1);
            
                continue;
            }
            
            i++;

        }

        return size-intervals.size();
    }

dalao思路:其实思路差不多,但dalao的做法更简洁,值得学习

 public int eraseOverlapIntervals(List<Interval> intervals) {
    Collections.sort(intervals, IntervalComp.COMP);
    int res = 0;
    int lastright = Integer.MIN_VALUE;
    for (Interval i : intervals)
      if (i.start >= lastright) {
        lastright = i.end;
      } else {
        res++;
        lastright = Math.min(lastright, i.end);//谁的end更大移除谁
      }
    return res;
  }

summary:1、总是先选取当前对情况最优的个体处理

2、使用一个变量,避免list.remove操作(其实完全不知道怎么描述summary,先放着。。。。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值