哈希表day5

242 有效的字母异位词

思路就是转为ASCII码,然后用一个数组记录26位字母出现的次数

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

这部分学习到的知识就多了
1、std::unordered_set,这是一个C++容器,底层是哈希表,查询复杂度为O(1),其次,他不允许有重复的值(也就是说,将vector nums的值放进去,会自动去重)
2、如何将vector的东西放进unordered_set中呢?

unordered_set<int> num_set(nums1.begin(),nums1.end());

同理,将unordered_set中的东西放进到vector中

vector<int> result(unordered_set.begin(),unordered_set.end())

3、如何对unordered_set中的元素进行查找呢?
使用nums_set.find(num) 如果找到了,那么就返回一个 指向该元素的迭代器,如果没找到,就返回nums_set.end()这个特殊的迭代器。

#include 
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //参数为nums1的引用,nums2的引用
        unordered_set<int> result_set;  //自动去重 + 查找速度快(平均 O(1))
        unordered_set<int> nums_set(nums1.begin(),nums1.end());//构建一个新的unordered_set,把nums1放进nums_set中,使用的是迭代器的语法,从nums1的begin到nums1的end
        for (int num:nums2){ //遍历 nums2 中的每一个数字 num。
            if (nums_set.find(num)!=nums_set.end()){    //如果nums_set.find(num)返回一个指向该元素的迭代器;如果没找到,那么就返回的是 nums_set.end(),这是一个“尾后迭代器”,表示“找不到”。
                result_set.insert(num); 
// 如果 num 存在于 nums_set 中:
// 返回一个 指向该元素的迭代器。
// 如果 num 不存在于 nums_set 中:
// 返回一个特殊的迭代器 —— nums_set.end(),表示“查找失败”或“无此元素”。
            }
        }
        return vector<int>(result_set.begin(),result_set.end()) //result_set.begin() 到 result_set.end() 形成一个范围,传给 vector 构造函数;
    }
};

202 快乐数

set.insert(num);
也就是将num加入到集合中

class Solution {
public:
    int getSum(int n){
        int result=0;
        while(n){
            result += (n%10)*(n%10);
            n = n/10;
        }
        return result;
    }
    bool isHappy(int n) {
        unordered_set<int> set;
        while(1){//不断循环
            int sum = getSum(n);
            if (sum==1){
                return true;
            }
            if (set.find(sum)!= set.end()){
                return false;
            }else{
                set.insert(sum);//新函数,将sum加入到set中
            }
            n = sum;
        }
    }
};

你可能感兴趣的:(Leetcode刷题日记,散列表,算法,数据结构)