057 - Insert Interval

来源:互联网 发布:手机wav播放软件 编辑:程序博客网 时间:2024/06/18 07:40

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as[1,5],[6,9].

Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as[1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].



struct Interval* insert(struct Interval* intervals, int intervalsSize, struct Interval newInterval, int* returnSize) {struct Interval *ret = (struct Interval *)malloc(sizeof(struct Interval) * (intervalsSize + 1));if (!intervalsSize) {*returnSize = 1;ret[0].start = newInterval.start;ret[0].end = newInterval.end;return ret;}int i, k = 0, ido = 0;for (i = 0; i < intervalsSize; i++) {if (!ido && newInterval.start < intervals[i].start) {ret[k].start = newInterval.start;ret[k++].end = newInterval.end;ido = 1;}ret[k].start = intervals[i].start;ret[k++].end = intervals[i].end;}if (k == intervalsSize) {ret[k].start = newInterval.start;ret[k++].end = newInterval.end;}*returnSize = 0;for (i = 1; i < intervalsSize + 1; i++) {if (ret[i].start <= ret[*returnSize].end)ret[*returnSize].end = ret[i].end > ret[*returnSize].end?ret[i].end:ret[*returnSize].end;else {(*returnSize)++;ret[*returnSize].start = ret[i].start;ret[*returnSize].end = ret[i].end;}}(*returnSize)++;return ret;}


0 0