242.有效的字母异位词
class Solution {
public :
bool isAnagram ( string s, string t) {
int record[ 26 ] = {
0 } ;
for ( int i = 0 ; i < s. size ( ) ; i++ ) {
record[ s[ i] - 'a' ] ++ ;
}
for ( int i = 0 ; i < t. size ( ) ; i++ ) {
record[ t[ i] - 'a' ] -- ;
}
for ( int i = 0 ; i < 26 ; i++ ) {
if ( record[ i] != 0 ) {
return false ;
}
}
return true ;
}
} ;
349. 两个数组的交集
class Solution {
public :
vector< int > intersection ( vector< int > & nums1, vector< int > & nums2) {
unordered_set< int > uset ( nums1. begin ( ) , nums1. end ( ) ) ;
unordered_set< int > res;
for ( int a: nums2) {
if ( uset. find ( a) != uset. end ( ) ) {
res. insert ( a) ;
}
}
return {
res. begin ( ) , res. end ( ) } ;
}
} ;
202. 快乐数
class Solution {
unordered_set< int > happy;
int pingfanghe ( int n) {
int res= 0 ;
while ( n) {
int count2= n% 10 ;
n= n/ 10 ;
res+= count2* count2;
}
return res;
}
public :
bool isHappy ( int n) {
if ( n== 1 ) return true ;
if ( happy. find ( n) == happy. end ( ) ) {
happy. insert ( n) ;
n= pingfanghe ( n) ;
return isHappy ( n) ;
} else {
return false ;
}
}
} ;
1. 两数之和
class Solution {
public :
vector< int > twoSum ( vector< int > & nums, int target) {
unordered_map< int , int > umap;
for ( int i= 0 ; i< nums. size ( ) ; i++ ) {
if ( umap. find ( target- nums[ i] ) == umap. end ( ) ) {
umap[ nums[ i] ] = i;
} else {
return {
i, umap[ target- nums[ i] ] } ;
}
}
return {
} ;
}
} ;
827.最大人工岛
class Solution {
int maxm= 0 ;
int count= 0 ;
int mask= 2 ;
int index[ 4 ] [ 2 ] = {
0 , 1 , 1 , 0 , - 1 , 0 , 0 , - 1 } ;
void dfs ( vector< vector< int >> & grid, int x, int y) {
if ( grid[ x] [ y] != 1 || grid[ x] [ y] == 0 ) return ;
grid[ x] [ y] = mask;
count++ ;
for ( int i= 0 ; i< 4 ; i++ ) {
int nextx= x+ index[ i] [ 0 ] ;
int nexty= y+ index[ i] [ 1 ] ;
if ( nextx< 0 || nexty< 0 || nextx>= grid. size ( ) || nexty>= grid[ 0 ] . size ( ) ) {
continue ;
}
if ( grid[ nextx] [ nexty] == 1 ) {
dfs ( grid, nextx, nexty) ;
}
}
}
public :
int largestIsland ( vector< vector< int >> & grid) {
unordered_map< int , int > umap;
for ( int i= 0 ; i< grid. size ( ) ; i++ ) {
for ( int j= 0 ; j< grid[ 0 ] . size ( ) ; j++ ) {
if ( grid[ i] [ j] == 1 ) {
count= 0 ;
dfs ( grid, i, j) ;
umap[ mask] = count;
maxm= max ( maxm, count) ;
mask++ ;
}
}
}
unordered_set< int > uset;
for ( int i= 0 ; i< grid. size ( ) ; i++ ) {
for ( int j= 0 ; j< grid[ 0 ] . size ( ) ; j++ ) {
if ( grid[ i] [ j] == 0 ) {
uset. clear ( ) ;
int a= 0 ;
for ( int k= 0 ; k< 4 ; k++ ) {
int nextx= i+ index[ k] [ 0 ] ;
int nexty= j+ index[ k] [ 1 ] ;
if ( nextx< 0 || nexty< 0 || nextx>= grid. size ( ) || nexty>= grid[ 0 ] . size ( ) ) {
continue ;
}
if ( grid[ nextx] [ nexty] != 0 && umap. count ( grid[ nextx] [ nexty] ) > 0 &&
uset. find ( grid[ nextx] [ nexty] ) == uset. end ( ) ) {
a+= umap[ grid[ nextx] [ nexty] ] ;
uset. insert ( grid[ nextx] [ nexty] ) ;
}
}
maxm= max ( a+ 1 , maxm) ;
}
}
}
return maxm;
}
} ;