作者:梅花七 | 来源:互联网 | 2024-11-10 12:36
本文详细记录了合并区间问题的解题技巧与应用场景。首先介绍了问题背景和题目描述,接着从排序最大值的角度探讨了解决思路,并提供了具体的程序代码及运行结果。此外,还探讨了其他可能的解决方案。最后,对整个解题过程进行了总结,为读者提供了全面的理解和参考。
作文以记之 ~ 合并区间 0、前言 1、题目描述 2、解决思路 2.1 排序 + 最大值 2.1.1 思路 2.1.2 程序代码 2.1.3 运行结果 2.2 其他方法 3、总结
0、前言 本篇博客是一个题解,具体题目可 点击此处 进行查看!具体代码以及其他内容可 点击此处 进行查看!
这个题是一个中等难度,做起来挺快乐的,就是对我而言时间成本有点高,害!正文开始!
1、题目描述 有关题目描述就自己看图片吧
2、解决思路 2.1 排序 + 最大值 2.1.1 思路 简单说就是先将目标数组数据进行排序,再对排序后的数组设定两个初值,比如start、end,其中start是寻找满足要求的区间的左值,end是寻找满足要求的右值,通过与目标区间的左右值进行比较来确定start与end,即比如若end处于目标区间的范围内,则将该区间的右值赋给end,直至当end小于一个区间的左值,然后将其插入到指定数组中即可。具体可见于代码!
2.1.2 程序代码 # include # include using namespace std; # include void shownums ( vector< vector< int >> & nums) { for ( int i &#61; 0 ; i < nums. size ( ) ; i&#43;&#43; ) { int j &#61; 0 ; cout << "[" ; for ( ; j < nums[ 0 ] . size ( ) - 1 ; j&#43;&#43; ) { cout << nums[ i] [ j] << " " ; } cout << nums[ i] [ j] << "] " ; } cout << endl; } vector< vector< int >> merge ( vector< vector< int >> & intervals) { int n &#61; intervals. size ( ) ; if ( n <&#61; 1 ) return intervals; sort ( intervals. begin ( ) , intervals. end ( ) ) ; vector< vector< int >> ans; int start &#61; intervals[ 0 ] [ 0 ] , end &#61; intervals[ 0 ] [ 1 ] ; int i; for ( i &#61; 1 ; i < intervals. size ( ) ; i&#43;&#43; ) { if ( intervals[ i] [ 0 ] > end) { ans. push_back ( { start, end } ) ; start &#61; intervals[ i] [ 0 ] , end &#61; intervals[ i] [ 1 ] ; } else if ( intervals[ i] [ 1 ] >&#61; end) { end &#61; intervals[ i] [ 1 ] ; } } if ( i &#61;&#61; n) ans. push_back ( { start, end } ) ; return ans; } void test ( ) { vector< vector< int >> nums &#61; { { 0 , 3 } , { 0 , 1 } , { 0 , 2 } , { 1 , 9 } , { 2 , 5 } , { 10 , 11 } , { 12 , 20 } , { 19 , 20 } } ; cout << "原数组&#xff1a;" ; shownums ( nums) ; cout << endl; cout << "处理后&#xff1a;" ; shownums ( merge ( nums) ) ; cout << endl; } int main ( ) { test ( ) ; system ( "pause" ) ; return 0 ; }
2.1.3 运行结果
2.2 其他方法 若后续有时间或者有想法&#xff0c;则补充其他方法&#xff01;
3、总结 本次这个题难度还行&#xff0c;只不过我浪费了好些时间&#xff0c;但最终还是解决了它&#xff0c;希望后面遇到同类型的题能有更快更好的解决思路或方法&#xff01;