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

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 是 对 内部 键值对 的 键 进行 的 散列 ?

取值前 要做 指针 / 指针 所指 内容 的 非空 判断 / 检查

对 代码 的 可读性 、 逻辑性 、 效率 的 优化

 
posted @ 2024-06-28 11:09  晴夜空  阅读(6)  评论(0)    收藏  举报