算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 完美数,我们先来看题面:

https://leetcode-cn.com/problems/next-greater-element-ii/

A perfect number is a positive integer that is equal to the sum of its positive divisors, excluding the number itself. A divisor of an integer x is an integer that can divide x evenly.

Given an integer n, return true if n is a perfect number, otherwise return false.

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。

给定一个 整数 n, 如果是完美数,返回 true,否则返回 false

示例

示例 1:
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。示例 2:
输入:num = 6
输出:true示例 3:
输入:num = 496
输出:true示例 4:输入:num = 8128
输出:true示例 5:
输入:num = 2
输出:false

解题

这里要注意,num最大可以取到10^8,所以不能是O(n)的时间复杂度(会超时)。

可以借鉴求质数的思想,如果i是num的因子,那么nums / i也是nums的因子,因此我们只需要枚举2~sqrt(num)即可,这样时间复杂度就是O(sqrt(n))。

另外还要注意,枚举的时候,1要单独处理,也是说num为1的情况需要特判,然后枚举因子的时候从2枚举到sqrt(num)即可。

class Solution {
public:bool checkPerfectNumber(int num) {if(num == 1) {return false;}int sum = 0; // sum表示num所有因子的和for(int i = 2; i <= num / i; ++i) { if(num % i == 0) {sum += i;if(i != num / i) { // 当i不等于sqrt(num)且i是num的因子时,num / i也是num的一个因子sum += num / i;}}}if(sum + 1 == num) { // 这里+1是因为1也是num的一个因子return true;}return false;}
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-500题汇总,希望对你有点帮助!

LeetCode刷题实战501:二叉搜索树中的众数

LeetCode刷题实战502:IPO

LeetCode刷题实战503:下一个更大元素 II

LeetCode刷题实战504:七进制数

LeetCode刷题实战505:迷宫II

LeetCode刷题实战506:相对名次

​LeetCode刷题实战507:完美数相关推荐

  1. ​LeetCode刷题实战517:超级洗衣机

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. ​LeetCode刷题实战391:完美矩形

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. ​LeetCode刷题实战375:猜数字大小 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. ​LeetCode刷题实战450:删除二叉搜索树中的节点

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. ​LeetCode刷题实战276:栅栏涂色

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. ​LeetCode刷题实战488:祖玛游戏

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. ​LeetCode刷题实战174:地下城游戏

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. ​LeetCode刷题实战216:组合总和 III

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战417:太平洋大西洋水流问题

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  10. ​LeetCode刷题实战314:二叉树的竖直遍历

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. unity game和scene效果不一样_都说水泥漆和乳胶漆只是叫法不一样,对房子装修效果一样,事实呢...
  2. Redis数据类型操作(五) —— Sorted Set
  3. Python中使用zip()并行迭代
  4. linux 压缩文件夹的一部分
  5. 浅析webrtc中音频的录制和播放流程
  6. as400和java的区别_文件传输协议和AS400
  7. 用phpcms如何将静态页面制作成企业网站(上)
  8. python open w_Python输入,输出,存储器和异常
  9. Python基础篇:用Python简简单单写个星空大战,可不能用来摸鱼啊~
  10. 20155325 2016-2017-2 《Java程序设计》第九周学习总结
  11. springboot使用@Async实现异步操作
  12. 山东烟建借沟通CTBS实现财务数据大集中
  13. 架构师进阶篇-什么是架构师
  14. 数据的逻辑结构包括那些?
  15. 叶俊:让能量爆棚的秘诀
  16. c++ Primer Plus笔记
  17. SDK之aar封装总结
  18. week-15(ZJM 与霍格沃兹)
  19. 第四十一章 贪心算法——排序不等式
  20. discuz 应用中心访问及下载较慢解决方法

热门文章

  1. kali2022.1google输入法
  2. SpringCloud、RabbitMQ、Websocket集群搭建以及集群通信
  3. 广域网宽带接入技术一
  4. 调色板类型、调色板模式、调色板压缩算法是什么意思?(调色板就是一个颜色的索引表)
  5. HDU 2586 How far away ? tarjan算法求LCA
  6. 深度学习(6): RNN
  7. 数据结构PTA 案例6-1.3 哥尼斯堡的“七桥问题”
  8. MySQL与Oracle的用户权限操作
  9. Android开机执行指定shell脚本
  10. http://hi.baidu.com/%BE%C5%CC%EC%C4%A7%CA%DE/blog/item/9b3263626a75ff49ebf8f808.html