代码随想录算法训练营第三十六天| 435. 无重叠区间、763.划分字母区间、56. 合并区间
435. 无重叠区间
题目链接 文章讲解
class Solution {
public :
static bool cmp ( const vector< int > & a, const vector< int > & b) {
return a[ 0 ] < b[ 0 ] ;
}
int eraseOverlapIntervals ( vector< vector< int >> & intervals) {
sort ( intervals. begin ( ) , intervals. end ( ) , cmp) ;
int n = intervals. size ( ) ;
int ans = 0 ;
for ( int i = 1 ; i < n; i++ ) {
if ( intervals[ i - 1 ] [ 1 ] > intervals[ i] [ 0 ] ) {
ans++ ;
intervals[ i] [ 1 ] = min ( intervals[ i - 1 ] [ 1 ] , intervals[ i] [ 1 ] ) ;
}
}
return ans;
}
} ;
763.划分字母区间
题目链接 文章讲解
class Solution {
public :
vector< int > partitionLabels ( string s) {
vector< int > ans;
int lastPos[ 26 ] ;
int n = s. size ( ) ;
for ( int i = 0 ; i < n; i++ )
lastPos[ s[ i] - 'a' ] = i;
int len = 0 ;
int end = lastPos[ s[ 0 ] - 'a' ] ;
for ( int i = 0 ; i < n; i++ ) {
end = max ( end, lastPos[ s[ i] - 'a' ] ) ;
len++ ;
if ( i == end) {
ans. push_back ( len) ;
len = 0 ;
}
}
return ans;
}
} ;
56. 合并区间
题目链接 文章讲解
class Solution {
public :
static bool cmp ( const vector< int > & a, const vector< int > & b) {
return a[ 0 ] < b[ 0 ] ;
}
vector< vector< int >> merge ( vector< vector< int >> & intervals) {
vector< vector< int >> ans;
sort ( intervals. begin ( ) , intervals. end ( ) , cmp) ;
int n = intervals. size ( ) ;
ans. push_back ( intervals[ 0 ] ) ;
for ( int i = 1 ; i < n; i++ ) {
if ( intervals[ i] [ 0 ] <= ans. back ( ) [ 1 ] ) {
ans. back ( ) [ 1 ] = max ( ans. back ( ) [ 1 ] , intervals[ i] [ 1 ] ) ;
} else {
ans. push_back ( intervals[ i] ) ;
}
}
return ans;
}
} ;