代码随想录:快乐数

代码随想录:快乐数

这题主要是学习一下几种set怎么用。

三种set,第一种第二种都是有序的,注意这个序列和插入序列无关,只和插入元素本身有关。

第三种哈希表,无序,如果只需要找元素是否出现过,用第三种刚刚好。

集合 底层实现 是否有序 数值是否可以重复 能否更改数值 查询效率 增删效率
std::set 红黑树 有序 O(log n) O(log n)
std::multiset 红黑树 有序 O(logn) O(logn)
std::unordered_set 哈希表 无序 O(1) O(1)

定义:

set<int>s
multiset<int>s
unordered_set<int> s

基本操作

s.insert()
s.erase()
//值得一提的是查找元素,用到了迭代器,但我懒得系统学,遇到一个记一个吧
s.find(3) != s.end()
//妈的查了一下也可以不用
s.count(3)即可

题目总代码

class Solution {
public:
    bool isHappy(int n) {
        set<int> s;
        while(1){
            if(n==1){return true;}
            n = getSum(n);
            if(s.find(n)!=s.end()){
                return false;
            }else{
                s.insert(n);
            }
        }
    }

    int getSum(int n) {
        int sum = 0;
        while (n != 0) {
            sum += (n % 10) * (n % 10);
            n = n / 10;
        }
        return sum;
    }
};
posted @   huigugu  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示