[LeetCode]Insert Interval

Insert[2, 5]into[[1,2], [5,9]], we get[[1,9]].

Insert[3, 4]into[[1,2], [5,9]], we get[[1,2], [3,4], [5,9]].

解题思路:

第一种思路是使用类似bitmap方式来存储数据,最后通过所有在bitmap中的字段来检查所有连续在一起的段值。解法发现不行,缺点是解决不了 start = end的情况,这样的情况,你是设置为true呢,还是不设置为true呢,如果通过设置为其他值的方式,思路就更加复杂了。

使用第二种方式来实现数据的插入(参考网上实现算法)。

迭代遍历每个对象,分别和待插入的段做比较,有如下6中情况。

情况1:待插入段比当前对象都大–> 插入当前对象,继续循环

情况2:待插入段比当前对象都小–> 插入比较段,插入当前对象,比较段设置为空

情况3-情况6: 这个试看段间有重合,直接将两个段做合并,作为新的比较段

另外还要注意:

a. 在迭代的时候,情况2 会将比较段设置为null,,所有如果比较段为null,直接执行情况1

b. 在循环结束后,判定,如果比较段不为null,则最后插入比较段(之前都为插入)

/** * Definition of Interval: * public classs Interval { *int start, end; *Interval(int start, int end) { *this.start = start; *this.end = end; *} */class Solution {/*** Insert newInterval into intervals.* @param intervals: Sorted interval list.* @param newInterval: A new interval.* @return: A new sorted interval list.*/public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {ArrayList<Interval> result = new ArrayList<Interval>();if(intervals==null || intervals.size()==0){result.add(newInterval);return result;}for(Interval v:intervals){if(newInterval == null)result.add(v);else {if(newInterval.end < v.start){result.add(newInterval);newInterval = null;result.add(v);}else if(newInterval.start > v.end)result.add(v);else {newInterval.start = Math.min(newInterval.start,v.start);newInterval.end = Math.max(newInterval.end,v.end);}}}if(newInterval != null)result.add(newInterval);return result;}}

可是却依旧为对方擦去嘴角的油渍。

[LeetCode]Insert Interval

相关文章:

你感兴趣的文章:

标签云: