day06 - 哈希表 part01

发布时间 2023-09-13 19:21:26作者: 笑忘书丶丶

力扣242. 有效的字母异位词

思路,将s串的每个字母哈希表表值++,再将t串每个字母的哈希表值--,如果是有效字母异位词,那么哈希表二十六个字母应该对应的是0.判断如果有不是0 的就返回false,否则为true

代码

bool isAnagram(string s, string t) {
   if (s.size() != t.size())
  {
       return false;
  }
   unordered_map<int, int> wordMap;
   for (int i = 0; i < s.size(); i++)
  {
       wordMap[s[i]]++;
  }
   for (int i = 0; i < t.size(); i++)
  {
       wordMap[t[i]]--;
  }
   for (int i = 'a'; i <= 'z'; i++)
  {
       if (wordMap[i] != 0)
      {
           return false;
      }
  }
   return true;
}
力扣202. 快乐数

思路:挺扯的,因为题里说了,要么是1, 要么无限循环,因此用set记录每次的sum,如果sum重复了就说明进行循环了。

代码如下:

 //取各位数平方和
int getSum(int n)
{
   int sum = 0;
   while (n)
  {
       sum += (n%10) * (n%10);
       n /= 10;
  }
   return sum;
}

bool isHappy(int num)
{
   unordered_set<int> happySet;
   int sum = getSum(num);
   while (true)
  {
       if (sum == 1)
      {
           return true;
      }
       if (happySet.find(sum) !=  happySet.end())
      {
           return false;
      }
       else
      {
           happySet.insert(sum);
      }
       sum = getSum(sum);
       
  }
}
力扣1. 两数之和

哈希表法思路:哈希表key代表数的值,value代表下标位置。

然后如果找到了target-nums[i],返回下标i和map[target-nums[i]],否则将这数加入到哈希表里。

代码

vector<int> twoSum(vector<int>& nums, int target) {
   unordered_map<int, int> numsMap;
   for (int i = 0; i < nums.size(); i++)
  {
       if (numsMap.find(target - nums[i]) != numsMap.end())
      {
           return {i, numsMap[target - nums[i]]};
      }
       else
      {
           numsMap[nums[i]] = i;
      }
  }
   return {};
}