[leetcode]Insert Interval

今天遇到一个错误,叫Output Limit Exceeded。我还特地试了一下,当ArrayList里面添加超过9147个Interval后,就会有这个错误。所以这说明我的算法有误,没能merge对Interval,导致大数据测试时爆了。

---(--)--(-)--(------)--(--)-(---)---(----)---(--)---

                              {----------------------------} newInterval

错误原因是只merge了第一个,其实后面那些也要遍历判断,所以最差时间是O(n),基于此,前面部分我也直接遍历过来得了,代码简单。当然采用二分肯定是更优的解法。

public class Solution {

    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {

        ArrayList<Interval> ans = new ArrayList<Interval>();

        int i = 0;

        int n = intervals.size();

        while (i < n && intervals.get(i).end < newInterval.start)

        {

            ans.add(intervals.get(i));

            i++;

        }

        // intervals[i].end >= newInterval.start

        while (i < n && intervals.get(i).start <= newInterval.end)

        {

            newInterval.start = Math.min(newInterval.start, intervals.get(i).start);

            newInterval.end = Math.max(newInterval.end, intervals.get(i).end);

            i++;

        }

        ans.add(newInterval);

        while (i < n)

        {

            ans.add(intervals.get(i));

            i++;

        }

        return ans;

    }

}

  

你可能感兴趣的:(LeetCode)