5.17——哈希表

哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。哈希表通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数存放记录的数组称做哈希表

1. 快乐数

class Solution {
public:
    int getNext(int n){ //对一个数进行数位分离,并且求其平方和
        int sum = 0;
        while(n>0){
            sum += pow(n%10,2);
            n /= 10;
        }
        return sum;
    }

public:
    bool isHappy(int n) {
        //发生循环则意味着某次得到的结果回到了之前的值,这就是这题的规律,要找!!!要具体,而不是抽象
        //若用数组存储每一次的值,则判断下一次的值是否在数组中的时间复杂度是O(n)
        //因此使用哈希表???
        unordered_map<int, int> map;
        while(n!=1){
            if(map.find(n)==map.end()){ //该数字不在,则加入哈希表中,继续计算下一个
                map.insert({n,n});
                n = getNext(n);
            }else{  //若该数字已经在哈希表中,则说明陷入了循环,返回false
                return false;
            }
        }
        //跳出了循环则说明n=1,返回true
        return true;
    }
};

我们要解决的是一个具体的问题,拿到问题首先要研究这个问题的特点和规律,然后才能充分运用数据结构与算法来高效地解决它。

哈希表的键之所以能在O(1)的时间找到其值,是因为其中的哈希算法将该键直接映射到了内存地址,也就相当于是数组的索引,就不用一个一个去找了,因为存放的时候也是按照该规律放的。字典的实现原理也是这样的🤔

2. 无重复字符的最长子串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值