LeetCode 57 Insert Interval

LeetCode 57

Insert Interval

  • Problem Description:
    给出一串不重叠区间,将一个新的区间插入到这些不重叠区间中,如果该新区间与原区间数组有重叠,要对区间进行合并处理。
    具体的题目信息:
    https://leetcode.com/problems/insert-interval/description/
  • Example:
    这里写图片描述
  • Solution:
/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
        vector<Interval> res;
        if (intervals.size() == 0) {
            res.push_back(newInterval);
            return res;
        }
        //用flag记录区间发生重叠,s标志重叠区间的左边界,e标志重叠区间的右边界
        int flag = 0, s, e, i;
        Interval t;
        for (i = 0; i < intervals.size(); i++) {
            if (flag == 0) {
                if (intervals[i].end >= newInterval.start) {
                    if (intervals[i].start <= newInterval.end) {
                    //发生重叠的判断条件
                        s = min(intervals[i].start, newInterval.start);
                        e = max(intervals[i].end, newInterval.end);
                        flag = 1;
                        if (i == intervals.size()-1) {
                            t = Interval(s, e);
                            res.push_back(t);
                        }
                    } else {
                        res.push_back(newInterval);
                        while(i < intervals.size()) {
                            res.push_back(intervals[i++]);
                        }
                    }
                } else {
                    res.push_back(intervals[i]);
                    if (i == intervals.size()-1) {
                        res.push_back(newInterval);
                    }
                }
            } else {
                if (intervals[i].start<=e) {
                //不断更新重叠区间的右边界
                    e = max(e, intervals[i].end);
                    if (i == intervals.size()-1) {
                        t = Interval(s, e);
                        res.push_back(t);
                    }
                } else {
                    t = Interval(s, e);
                    res.push_back(t);
                    while(i < intervals.size()) {
                        res.push_back(intervals[i++]);
                    }
                }
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/shey666/article/details/80748822
今日推荐