leetcode 57. Insert Interval

这一题似乎没有 http://blog.csdn.net/hackerzer/article/details/73253017 leetcode 56 难,不用排序,直接list插入就可以。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Comparator; 

/**
 * 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 static void main(String[] args){
        Solution s = new Solution();
        Interval in1 = new Interval(1,2);
        Interval in2 = new Interval(3,5);
        Interval in3 = new Interval(6,7);
        Interval in4 = new Interval(8,10);
        Interval in5 = new Interval(12,16);
        Interval in6 = new Interval(4,9);
        List<Interval>  ins = new ArrayList<Interval>();
        ins.add(in1);
        ins.add(in2);
        ins.add(in3);
        ins.add(in4);
        ins.add(in5);
        s.insert(ins, in6);
    }

    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
        int len = intervals.size();
        if(len==0){
            intervals.add(newInterval);
        }else{
            int k=-1;
            for(int i=0;i<len;i++){
                if(intervals.get(i).start>newInterval.start){
                    k=i;
                    break;
                }
            }
            if(k==-1)  k = len;
//          System.out.println(k);
            intervals.add(k, newInterval);
//          System.out.println(intervals.size());
//          for(Interval inte:intervals){
//              System.out.print(inte.start+" ");
//              System.out.println(inte.end);
//          }
        }
        List<Interval> res = merge(intervals);
//      for(Interval inst:res){
//          System.out.println(inst.start+" "+ inst.end);
//      }
        return res;
    }


    public List<Interval> merge(List<Interval> intervals) {
         List<Interval> res = new ArrayList<Interval>();
         int len = intervals.size();
         if(len==0)  return res;
//       Comparator cmp = new mycmp(); 
//       Collections.sort(intervals,cmp);
         int pre_s = intervals.get(0).start;
         int pre_e = intervals.get(0).end;

         for(int i=1;i<len;i++){
             Interval inter = intervals.get(i);
             int cur_s = inter.start;
             int cur_e = inter.end;
             if(cur_s<=pre_e&&cur_e>pre_e){
                 pre_e =  cur_e;
             }else if(cur_s>pre_e){
                 Interval new_in = new Interval(pre_s,pre_e);
                 res.add(new_in);
                 pre_s =  cur_s;
                 pre_e =  cur_e;
             }
         }
         Interval new_in = new Interval(pre_s,pre_e);
         res.add(new_in);
         return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值