**242.有效的字母异位词****349. 两个数组的交集****202. 快乐数****1. 两数之和**

85 阅读4分钟

242.有效的字母异位词* 349. 两个数组的交集*202. 快乐数1. 两数之和

242.有效的字母异位词

题目链接 :

242. 有效的字母异位词 - 力扣(LeetCode)

代码 :

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. 两个数组的交集

题目链接 :

349. 两个数组的交集 - 力扣(LeetCode)

代码 : ( 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. 快乐数

题目链接 :

202. 快乐数 - 力扣(LeetCode)

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. 两数之和

题目链接 :

1. 两数之和 - 力扣(LeetCode)

代码 : (结构体 版 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 是 对 内部 键值对 的 键 进行 的 散列 ?
取值前 要做 指针 / 指针 所指 内容 的 非空 判断 / 检查
对 代码 的 可读性 、 逻辑性 、 效率 的 优化