代码随想录:快乐数

代码随想录:快乐数

这题主要是学习一下几种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 @ 2024-11-24 21:24  huigugu  阅读(8)  评论(0)    收藏  举报