代码随想录算法训练营第三十四天| 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
860.柠檬水找零
题目链接 文章讲解
class Solution {
public :
bool lemonadeChange ( vector< int > & bills) {
int n = bills. size ( ) ;
int five = 0 , ten = 0 ;
for ( const int & bill : bills) {
if ( bill == 5 ) {
five++ ;
} else if ( bill == 10 ) {
if ( five == 0 ) return false ;
five-- , ten++ ;
} else {
if ( five > 0 && ten > 0 ) {
five-- , ten-- ;
} else if ( five >= 3 ) {
five -= 3 ;
} else {
return false ;
}
}
}
return true ;
}
} ;
406.根据身高重建队列
题目链接 文章讲解
class Solution {
public :
static bool cmp ( const vector< int > & a, const vector< int > & b) {
return a[ 0 ] > b[ 0 ] || ( a[ 0 ] == b[ 0 ] && a[ 1 ] < b[ 1 ] ) ;
}
vector< vector< int >> reconstructQueue ( vector< vector< int >> & people) {
int n = people. size ( ) ;
sort ( people. begin ( ) , people. end ( ) , cmp) ;
for ( int i = 0 ; i < n; i++ ) {
int k = people[ i] [ 1 ] ;
for ( int j = i; j > k; j-- ) {
swap ( people[ j] , people[ j - 1 ] ) ;
}
}
return people;
}
} ;
452. 用最少数量的箭引爆气球
题目链接 文章讲解
class Solution {
public :
static bool cmp ( const vector< int > & a, const vector< int > & b) {
return a[ 0 ] < b[ 0 ] ;
}
int findMinArrowShots ( vector< vector< int >> & points) {
sort ( points. begin ( ) , points. end ( ) , cmp) ;
int ans = 1 ;
int end = points[ 0 ] [ 1 ] ;
for ( const vector< int > & point : points) {
if ( point[ 0 ] > end) {
ans++ ;
end = point[ 1 ] ;
} else {
end = min ( end, point[ 1 ] ) ;
}
}
return ans;
}
} ;