关于哈希表map, set 以及地址寻址迭代器的知识总结!(持续更新2021. 5.30!!!!!!)

前言:
   关于哈希表的遍历,我觉得可以参考这篇博文.一般常见的可以用auto来遍历,用first和second来索引key和value,也可以用迭代器来遍历。

2的幂
在这里插入图片描述
直接先上题目,这个题目我的一个思路使用set,注意到set它只会存元素,没有索引,唯一的搜索方式就是.count和.find,不像map这种key索引。注意到n如果是的话一定是只有一个1的二进制数。所以可以用方法2和3

class Solution {
public:
    bool isPowerOfTwo(int n) {
    // int是可以到2的30次方。
    if(n<=0)
    return false;
    unordered_set<int>set;
    for(int i=0;i<=30;i++){
      set.insert(pow(2,i));
    }
      if(set.count(n))
        return true;
      return false;
    }
};
class Solution {
public:
    bool isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }
};
class Solution {
public:
    bool isPowerOfTwo(int n) {
        return n > 0 && (n & -n) == n;
    }
};
n和他的相反数相互与,得到的是保留最低一位1的结果其他全部变成0

面试题 01.01. 判定字符是否唯一

class Solution {
public:
    bool isUnique(string astr) {
    unordered_set<char>set;
    for(int i=0; i<astr.size();i++){
       if(set.count(astr[i]))
       return false;
       set.insert(astr[i]);
    }
    return true;    
    }
};

面试题 01.02. 判定是否互为字符重排
题目:
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if(s1.size() != s2.size())
            return false;
        unordered_map <char, int> umap;

        for(int i = 0; i < s1.size(); i++) //连连看
        {
            ++umap[s1[i]];
            --umap[s2[i]];
        }

        for(int i = 0; i < s1.size(); i++) //判断连连看的结果
        {
            if(umap[s1[i]] != 0)
                return false;
        }

        return true;

    }
};

或者用迭代器:

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if(s1.size() != s2.size())
            return false;
        unordered_map <char, int> umap;

        for(int i = 0; i < s1.size(); i++) //连连看
        {
            ++umap[s1[i]];
            --umap[s2[i]];
        }

        for(auto & map:umap) //判断连连看的结果
        {
            if(map.second != 0)
                return false;

        }

        return true;

    }
};

或者排序

class Solution {
public:
    bool CheckPermutation(string s1, string s2) 
    {
        sort(s1.begin(),s1.end());
        sort(s2.begin(),s2.end());
        if(s1==s2)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值