对应leetcode169——多数元素 多数元素
int moreThanHalfNum_Solution ( vector< int > & nums) {
int val, cnt = 0 ;
for ( auto x : nums) {
if ( ! cnt) {
val = x;
cnt ++ ;
}
else {
if ( x == val) cnt ++ ;
else cnt -- ;
}
}
return val;
}
对应leetcode229——求众数 给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
vector< int > majorityElement ( vector< int > & nums) {
int ll[ 3 ] [ 2 ] = { 0 , 0 , 0 , 0 , 0 , 0 } ;
vector< int > Return_Data;
for ( int i = 0 ; i < nums. size ( ) ; i++ ) {
if ( ( ll[ 1 ] [ 0 ] ) != 0 && ( ll[ 1 ] [ 1 ] != 0 ) ) {
if ( ll[ 0 ] [ 0 ] == nums[ i] ) ll[ 1 ] [ 0 ] ++ ;
else if ( ll[ 0 ] [ 1 ] == nums[ i] ) ll[ 1 ] [ 1 ] ++ ;
else {
ll[ 1 ] [ 0 ] -- ;
ll[ 1 ] [ 1 ] -- ;
}
continue ;
}
if ( ll[ 0 ] [ 0 ] == nums[ i] ) {
ll[ 1 ] [ 0 ] ++ ;
continue ;
} else if ( ll[ 0 ] [ 1 ] == nums[ i] ) {
ll[ 1 ] [ 1 ] ++ ;
continue ;
}
if ( ll[ 1 ] [ 0 ] == 0 ) {
ll[ 0 ] [ 0 ] = nums[ i] ;
ll[ 1 ] [ 0 ] ++ ;
} else {
if ( ll[ 1 ] [ 1 ] == 0 ) {
ll[ 0 ] [ 1 ] = nums[ i] ;
ll[ 1 ] [ 1 ] ++ ;
}
}
}
for ( int i = 0 ; i < nums. size ( ) ; i++ ) {
if ( nums[ i] == ll[ 0 ] [ 1 ] ) ll[ 2 ] [ 1 ] ++ ;
else if ( nums[ i] == ll[ 0 ] [ 0 ] ) ll[ 2 ] [ 0 ] ++ ;
}
for ( int i = 0 ; i < 2 ; i++ ) {
if ( ( float ) ll[ 2 ] [ i] / nums. size ( ) > 0.33334 ) Return_Data. push_back ( ll[ 0 ] [ i] ) ;
}
return ( Return_Data) ;
}