三、查找表(简单示例)
349. 两个数组的交集
class Solution {
public :
vector< int > intersection ( vector< int > & nums1, vector< int > & nums2) {
set< int > record ( nums1. begin ( ) , nums1. end ( ) ) ;
set< int > res;
for ( int i= 0 ; i< nums2. size ( ) ; ++ i) {
if ( record. find ( nums2[ i] ) != record. end ( ) )
res. insert ( nums2[ i] ) ;
}
return vector< int > ( res. begin ( ) , res. end ( ) ) ;
}
} ;
350. 两个数组的交集 II
class Solution {
public :
vector< int > intersect ( vector< int > & nums1, vector< int > & nums2) {
map< int , int > record;
for ( int i= 0 ; i< nums1. size ( ) ; ++ i) {
if ( record. find ( nums1[ i] ) != record. end ( ) )
record[ nums1[ i] ] ++ ;
else
record. insert ( make_pair ( nums1[ i] , 1 ) ) ;
}
vector< int > res;
for ( int i= 0 ; i< nums2. size ( ) ; ++ i) {
if ( record. find ( nums2[ i] ) != record. end ( ) && record[ nums2[ i] ] > 0 ) {
res. push_back ( nums2[ i] ) ;
-- record[ nums2[ i] ] ;
}
}
return res;
}
} ;
242. 有效的字母异位词
class Solution {
public :
bool isAnagram ( string s, string t) {
map< char , int > record_s;
if ( s. size ( ) != t. size ( ) )
return false ;
for ( int i= 0 ; i< s. size ( ) ; ++ i) {
if ( record_s. find ( s[ i] ) != record_s. end ( ) )
++ record_s[ s[ i] ] ;
else
record_s. insert ( make_pair ( s[ i] , 1 ) ) ;
}
for ( int i= 0 ; i< t. size ( ) ; ++ i) {
if ( record_s. find ( t[ i] ) != record_s. end ( ) && record_s[ t[ i] ] > 0 ) {
-- record_s[ t[ i] ] ;
}
else
return false ;
}
return true ;
}
} ;
202. 快乐数
class Solution {
public :
int pow2Sum ( int n) {
int res = 0 ;
while ( n/ 10 ) {
res + = pow ( n% 10 , 2 ) ;
n / = 10 ;
}
res + = pow ( n% 10 , 2 ) ;
return res;
}
bool isHappy ( int n) {
set< int > record;
while ( record. find ( n) == record. end ( ) ) {
if ( n== 1 )
return true ;
record. insert ( n) ;
n = pow2Sum ( n) ;
}
return false ;
}
} ;
290. 单词规律
class Solution {
public :
bool wordPattern ( string pattern, string s) {
map< char , string> connect_two_way;
map< string, char > connect_two_way_r;
vector< string> vec_s;
string temp_s;
for ( int i= 0 ; i< s. size ( ) ; ++ i) {
if ( s[ i] == ' ' ) {
vec_s. push_back ( temp_s) ;
++ i;
temp_s = s[ i] ;
continue ;
}
temp_s + = s[ i] ;
}
vec_s. push_back ( temp_s) ;
if ( pattern. size ( ) != vec_s. size ( ) )
return false ;
for ( int i= 0 ; i< pattern. size ( ) ; ++ i) {
if ( connect_two_way. find ( pattern[ i] ) == connect_two_way. end ( ) ) {
connect_two_way. insert ( make_pair ( pattern[ i] , vec_s[ i] ) ) ;
}
else {
if ( connect_two_way[ pattern[ i] ] != vec_s[ i] )
return false ;
}
}
for ( int i= 0 ; i< vec_s. size ( ) ; ++ i) {
if ( connect_two_way_r. find ( vec_s[ i] ) == connect_two_way_r. end ( ) ) {
connect_two_way_r. insert ( make_pair ( vec_s[ i] , pattern[ i] ) ) ;
}
else {
if ( connect_two_way_r[ vec_s[ i] ] != pattern[ i] )
return false ;
}
}
return true ;
}
} ;
451. 根据字符出现频率排序
class Solution {
public :
string frequencySort ( string s) {
pair< int , char > freq[ 256 ] ;
for ( int i= 0 ; i< 256 ; ++ i) {
freq[ i] . first = 0 ;
freq[ i] . second = i;
}
for ( int i= 0 ; i< s. size ( ) ; ++ i) {
++ freq[ s[ i] ] . first;
}
sort ( freq, freq+ 256 , greater< pair< int , char >> ( ) ) ;
int index = 0 ;
for ( int i= 0 ; i< s. size ( ) ; ++ i) {
while ( freq[ index] . first== 0 )
++ index;
s[ i] = freq[ index] . second;
-- freq[ index] . first;
}
return s;
}
} ;