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;
}
相关文章
- MAP遍历_map容器遍历
- list遍历的几种方式_arraylist cannot be cast to
- Map嵌套Map遍历[通俗易懂]
- 给出前序遍历和中序遍历求二叉树_已知前序遍历和后序遍历
- 判断数组是否是二叉树搜索树的后序遍历结果
- 异步遍历器
- 【图像配准】图像融合再探索/图像像素点遍历加速
- 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 人物数据内存结构 | 人物三维坐标数据分析 )
- 【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )
- LeetCode——二叉树的非递归遍历
- set遍历详解编程语言
- MSSQL中妙用遍历记录技巧助攻数据管理(mssql 遍历记录)
- 探索Redis数据结构之旅(遍历redis数据结构)
- 文件遍历排序函数
- 使用Enumeration和Iterator遍历集合类详解
- 基于Java实现的图的广度优先遍历算法