代码随想录:快乐数
这题主要是学习一下几种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;
}
};
标签:std,10,set,return,int,代码,随想录,快乐
From: https://www.cnblogs.com/huigugu/p/18566418