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) {
if ( intervals. size ( ) == 0 ) return 0 ;
sort ( intervals. begin ( ) , intervals. end ( ) , cmp) ;
vector< vector< int >> result;
int minQuan = 0 ;
result. push_back ( intervals[ 0 ] ) ;
for ( int i = 1 ; i < intervals. size ( ) ; ++ i) {
if ( result. back ( ) [ 1 ] > intervals[ i] [ 0 ] ) {
minQuan++ ;
if ( result. back ( ) [ 1 ] >= intervals[ i] [ 1 ] ) {
result. pop_back ( ) ;
result. push_back ( intervals[ i] ) ;
}
}
else {
result. push_back ( intervals[ i] ) ;
}
}
return minQuan;
}
} ;
763. 划分字母区间
class Solution {
public :
vector< int > partitionLabels ( string s) {
int hash[ 26 ] = { 0 } ;
for ( int i = 0 ; i < s. size ( ) ; ++ i) {
hash[ s[ i] - 'a' ] = i;
}
int left = 0 , right = 0 ;
vector< int > result;
for ( int i = 0 ; i < s. size ( ) ; ++ i) {
right = max ( right, hash[ s[ i] - 'a' ] ) ;
if ( i == right) {
result. push_back ( right - left + 1 ) ;
left = i + 1 ;
}
}
return result;
}
} ;
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 >> result;
sort ( intervals. begin ( ) , intervals. end ( ) , cmp) ;
result. push_back ( intervals[ 0 ] ) ;
for ( int i = 1 ; i < intervals. size ( ) ; ++ i) {
if ( intervals[ i] [ 0 ] > result. back ( ) [ 1 ] ) {
result. push_back ( intervals[ i] ) ;
}
else if ( intervals[ i] [ 1 ] > result. back ( ) [ 1 ] ) {
result. back ( ) [ 1 ] = intervals[ i] [ 1 ] ;
}
}
return result;
}
} ;