[LeetCode]Merge Intervals
生活随笔
收集整理的這篇文章主要介紹了
[LeetCode]Merge Intervals
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目:Merge Intervals
給定n個區(qū)間合并重合區(qū)間
思路:
先按照區(qū)間起點排序,然后合并下面情況:
1.起點相同,以最大的終點為新的終點;
2.前一個終點大于后一個的起點。
/*************************************************************************************************** Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. ***************************************************************************************************/ #include<stdio.h>struct Interval {int start;int end; };/*按區(qū)間起點排序*/ int cmp(const void *a , const void *b){struct Interval *intval1 = (struct Interval *)a;struct Interval *intval2 = (struct Interval *)b;return intval1->start - intval2->start; }/*** Definition for an interval.* struct Interval {* int start;* int end;* };*/ /*** Return an array of size *returnSize.* Note: The returned array must be malloced, assume caller calls free().*/ struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize) {if(intervalsSize == 0){//數(shù)組為0*returnSize = 0;return NULL;}if(intervalsSize == 1){//只有一個區(qū)間*returnSize = 1;struct Interval *retIntv = (struct Interval*)malloc(sizeof(struct Interval));retIntv[0].start = intervals[0].start;retIntv[0].end = intervals[0].end;return retIntv;}qsort(intervals,intervalsSize,sizeof(struct Interval),cmp);//排序int length = 0,end = 0;int *starts = (int *)malloc(intervalsSize*sizeof(int));int *ends = (int *)malloc(intervalsSize*sizeof(int));memset(starts,-1,intervalsSize*sizeof(int));memset(ends,-1,intervalsSize*sizeof(int));for(int i = 0;i < intervalsSize;i++){starts[length] = intervals[i].start;ends[length] = intervals[i].end;while(i < intervalsSize - 1 && ends[length] >= intervals[i + 1].start){//合并前一個終點大于后一個的起點的區(qū)間i++;ends[length] = ends[length] > intervals[i].end ? ends[length] : intervals[i].end;}length++;}struct Interval *retIntv = (struct Interval*)malloc(length*sizeof(struct Interval));for(int i = 0;i < length;i++){retIntv[i].start = starts[i];retIntv[i].end = ends[i];}free(starts);free(ends);*returnSize = length;return retIntv; }void main(){//[1,3],[2,6],[8,10],[15,18]//[1,6],[2,3],[8,10],[15,18]//[1,6],[8,10],[2,3],[15,18]struct Interval *intervals = (struct Interval *)malloc(1*sizeof(struct Interval));intervals[0].start = 1;intervals[0].end = 6;//intervals[1].start = 5;//intervals[1].end = 10;//intervals[2].start = 2;//intervals[2].end = 3;//intervals[3].start = 15;//intervals[3].end = 18;int length = 0;struct Interval *retIntv = merge(intervals,1,&length);for(int i = 0;i < length;i++){printf("[%d,%d]\n",retIntv[i].start,retIntv[i].end);}free(intervals);free(retIntv); }?
轉(zhuǎn)載于:https://www.cnblogs.com/yeqluofwupheng/p/6670543.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的[LeetCode]Merge Intervals的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jsch ssh登陆
- 下一篇: POJ NOI MATH-7828 最大