zl程序教程

您现在的位置是:首页 >  后端

当前栏目

1288. 删除被覆盖区间-快速排序加遍历

遍历排序 快速 删除 覆盖 区间
2023-09-14 09:06:53 时间

1288. 删除被覆盖区间

给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。

只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。

在完成所有删除操作后,请你返回列表中剩余区间的数目。

示例:

输入:intervals = [[1,4],[3,6],[2,8]]
输出:2
解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。

这题还是很不错的,很有意思,解题代码如下,感兴趣的可以多了解:




void quick_sort(int**a,int low,int high){
    if(low<=high){
     // printf("%d %d ",low,high);
        int l=low,h=high;
        int p=a[low][0];
        int p2=a[low][1];
        while(low<high){
            while(low<high&&a[high][0]>=p){
          //       printf("%d %d ",low,high);
                high--;
            }
           a[low][0]=a[high][0];
           a[low][1]=a[high][1];
            while(low<high&&a[low][0]<=p){
       //            printf("%d %d ",low,high);
                low++;
            }
             a[high][0]=a[low][0];
           a[high][1]=a[low][1];
        }
       //   printf("%d %d ",low,high);
         a[low][0]=p;
        a[low][1]=p2;
        quick_sort(a,l,low-1);
         quick_sort(a,low+1,h);
    }

}

int removeCoveredIntervals(int** intervals, int intervalsSize, int* intervalsColSize){
    quick_sort(intervals,0,intervalsSize-1);
    int num=0;
    int i;
    int index=0;
      
    for(i=1;i<intervalsSize;i++){
     
        if(intervals[i][0]==intervals[index][0]){
            if(intervals[i][1]>intervals[index][1]){
                index=i;
            }
            else{
                index=i-1;
            }
            continue;
        }
      
        if(intervals[i][0]<=intervals[index][1]&&intervals[i][1]<=intervals[index][1]){
          continue;
        }
        else{
            num++;
            index=i;
        }
    }
    return num+1;

}