242.有效的字母异位词* 349. 两个数组的交集*202. 快乐数1. 两数之和
242.有效的字母异位词
题目链接 :
代码 :
class Solution {
public:
bool isAnagram(string s, string t) {
int array_Count_Char_1 [26] ;
int array_Count_Char_2 [26] ;
//cout<< int('a')<<endl;
//bool FlagMark = true ;
for(int i = 0 ; i < 26 ; i++)
{
array_Count_Char_1[i] = 0;
}
for(int i = 0 ; i < 26 ; i++)
{
array_Count_Char_2[i] = 0;
}
for(int i = 0 ; s[i] != '\0' ; i++)
{
array_Count_Char_1[int(s[i] - 97)]++;
}
for(int i = 0 ; t[i] != '\0' ; i++)
{
array_Count_Char_2[int(t[i] - 97)]++;
}
for(int i = 0 ; i < 26 ; i++ )
{
if(array_Count_Char_1[i] != array_Count_Char_2[i])
{
return false ;
}
}
return true ;
}
};
349. 两个数组的交集
题目链接 :
代码 : ( set 实现 版)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int length_nums1 = nums1.size();
int length_nums2 = nums2.size();
set<int> set_num_nums1 ;
set<int> set_num_nums2 ;
vector<int> vec_CoNums_Receive ;
for(int i = 0 ; i < length_nums1 ; i++)
{
set_num_nums1.insert(nums1[i]);
}
for(int i = 0 ; i < length_nums2 ; i++)
{
set_num_nums2.insert(nums2[i]);
}
set<int>::iterator it_set_num_nums1 = set_num_nums1.begin() ;
while(it_set_num_nums1 != set_num_nums1.end())
{
int num_Temp = *it_set_num_nums1 ;
if( set_num_nums2.find(num_Temp) != set_num_nums2.end() )
{
vec_CoNums_Receive.push_back(num_Temp);
}
it_set_num_nums1++;
}
return vec_CoNums_Receive ; // different core
}
};
代码 : ( set 实现 版)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int length_nums1 = nums1.size();
int length_nums2 = nums2.size();
unordered_set<int> unordered_set_num_nums1 ;
unordered_set<int> unordered_set_num_nums2 ;
vector<int> vec_CoNums_Receive ;
for(int i = 0 ; i < length_nums1 ; i++)
{
unordered_set_num_nums1.insert(nums1[i]);
}
for(int i = 0 ; i < length_nums2 ; i++)
{
unordered_set_num_nums2.insert(nums2[i]);
}
unordered_set<int>::iterator it_unordered_set_num_nums1 = unordered_set_num_nums1.begin() ;
while(it_unordered_set_num_nums1 != unordered_set_num_nums1.end())
{
int num_Temp = *it_unordered_set_num_nums1 ;
if( unordered_set_num_nums2.find(num_Temp) != unordered_set_num_nums2.end() )
{
vec_CoNums_Receive.push_back(num_Temp);
}
it_unordered_set_num_nums1++;
}
return vec_CoNums_Receive ; // different core
}
};
202. 快乐数
题目链接 :
class Solution {
public:
bool isHappy(int n) {
//unordered_set<int> unordered_set_NumAggregate ;
unordered_set<int> unordered_set_Num_Whole ;
int num_Cache = n ;
int sum_Temp = 0 ;
//cout<< "num_Cache : " << num_Cache << endl ;
unordered_set_Num_Whole.insert(num_Cache);
while( num_Cache != 1 )
{
sum_Temp = 0 ;
while(num_Cache != 0 )
{
sum_Temp += pow((num_Cache % 10),2) ;
num_Cache = num_Cache / 10 ;
}
num_Cache = sum_Temp ;
//cout<< "num_Cache : " << num_Cache << endl ;
if( unordered_set_Num_Whole.find(num_Cache) != unordered_set_Num_Whole.end())
{
return false ;
}
unordered_set_Num_Whole.insert(num_Cache);
}
return true ;
}
};
1. 两数之和
题目链接 :
代码 : (结构体 版 unordered_set ) ( 尚未 疏通 )
class Solution {
public:
struct num_index
{
int num ; // 对 num 属性 进行 Hash 映射
int index ;
};
vector<int> twoSum(vector<int>& nums, int target) {
unordered_set<num_index> unordered_set_SourceNums ;
int length = nums.size() ;
for(int i = 0 ; i < length ; i++ )
{
num_index num_index_Temp;
num_index_Temp.num = nums[i] ;
num_index_Temp.index = i ;
unordered_set_SourceNums.insert(num_index_Temp) ;
//unordered_set_SourceNums.insert(nums[i]) ;
// 把 下标 使用 结构体 作为 其它 结构 存 进去
}
unordered_set<num_index>::iterator it_Work = unordered_set_SourceNums.begin();
unordered_set<num_index>::iterator it_End_unordered_set_SourceNums = unordered_set_SourceNums.end();
for( ; it_Work != it_End_unordered_set_SourceNums ; it_Work++ )
{
num_index num_index_it_Work = *it_Work ;
int num_Correspond = target - num_index_it_Work.num ;
unordered_set<num_index>::iterator it_Receive = unordered_set_SourceNums.find(num_Correspond) ;
num_index num_index_it_Receive = *it_Receive ;
if( it_Receive == unordered_set_SourceNums.end() )
{
continue ;
}
else if( it_Receive == it_Work )
{
continue ;
}
else
{
// 将 下标 集合 添加 至 xx 数组
// /
// 将 下标 数组 添加 至 xx 数组
// /
// 将 下标 组合 提取
//int index1 = int ( (it_Work - unordered_set_SourceNums.begin()) / 4 ) ;
//int index2 = int ( (it_Receive - unordered_set_SourceNums.begin()) / 4 ) ;
//int index1 = std::distance(unordered_set_SourceNums.begin() , it_Work) ;
//int index2 = std::distance(unordered_set_SourceNums.begin() , it_Receive) ;
int index1 = num_index_it_Work.index ;
int index2 = num_index_it_Receive.index ;
int num1 = num_index_it_Work.num ;
int num2 = num_index_it_Receive.num ;
cout<< "num1 :" <<num1<<" At "<<index1<<endl;
cout<< "num2 :" <<num2<<" At "<<index2<<endl;
vector<int> vec_Index_Receive = { index1 , index2 } ;
return vec_Index_Receive ;
}
代码 : ( unordered_multimap 版 )
class Solution {
public:
struct num_index
{
int num ; // 对 num 属性 进行 Hash 映射
int index ;
};
vector<int> twoSum(vector<int>& nums, int target) {
unordered_multimap<int,num_index> unordered_multimap_SourceNums ;
int length = nums.size() ;
for(int i = 0 ; i < length ; i++ )
{
num_index num_index_Temp;
num_index_Temp.num = nums[i] ;
num_index_Temp.index = i ;
unordered_multimap_SourceNums.insert({num_index_Temp.num , num_index_Temp}) ;
//unordered_set_SourceNums.insert(nums[i]) ;
// 把 下标 使用 结构体 作为 其它 结构 存 进去
}
unordered_multimap<int , num_index >::iterator it_Work = unordered_multimap_SourceNums.begin();
unordered_multimap<int , num_index >::iterator it_End_unordered_multimap_SourceNums = unordered_multimap_SourceNums.end();
for( ; it_Work != it_End_unordered_multimap_SourceNums ; it_Work++ )
{
num_index num_index_it_Work;
num_index_it_Work = (*it_Work).second ;
int num_Correspond = target - num_index_it_Work.num ;
unordered_multimap<int , num_index >::iterator it_Receive = unordered_multimap_SourceNums.find(num_Correspond) ;
//cout<< "(*it_Receive).first : " << (*it_Receive).first << endl ;
// 如果 xx 为 空 的 话 , 调用 / 取值 前 的 指针 / 指针 所 指 内容 的 非空 判断 / 检查 / 结构 调整
num_index num_index_it_Receive ;
if( it_Receive == unordered_multimap_SourceNums.end() )
{
continue ;
}
else if( it_Receive == it_Work )
{
continue ;
}
else
{
// 将 下标 集合 添加 至 xx 数组
// /
// 将 下标 数组 添加 至 xx 数组
// /
// 将 下标 组合 提取
//int index1 = int ( (it_Work - unordered_set_SourceNums.begin()) / 4 ) ;
//int index2 = int ( (it_Receive - unordered_set_SourceNums.begin()) / 4 ) ;
//int index1 = std::distance(unordered_set_SourceNums.begin() , it_Work) ;
//int index2 = std::distance(unordered_set_SourceNums.begin() , it_Receive) ;
num_index_it_Receive = (*it_Receive).second ;
int index1 = num_index_it_Work.index ;
int index2 = num_index_it_Receive.index ;
int num1 = num_index_it_Work.num ;
int num2 = num_index_it_Receive.num ;
//cout<< "num1 :" <<num1<<" At "<<index1<<endl;
//cout<< "num2 :" <<num2<<" At "<<index2<<endl;
vector<int> vec_Index_Receive = { index1 , index2 } ;
return vec_Index_Receive ;
}
}
return vector<int>{ -1 , -1} ;
}
};
对类似部分代码复用时 , 记得 更新 / 检查 代码 ,
数字 循环变化 与 数字 无限延伸 的 情况 ,
迭代器 之间 的 判断 要用 '==' 和 '!=' , 迭代器 通过 “ *迭代器 ” 来 取 内部 数据 ,
将 结构体 存入 unordered_multimap 的 键值对 的 值 中 ?
unordered_multimap 是 对 内部 键值对 的 键 进行 的 散列 ?
取值前 要做 指针 / 指针 所指 内容 的 非空 判断 / 检查
对 代码 的 可读性 、 逻辑性 、 效率 的 优化