查看: 1116| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 请教LC233. Number of Digit One时间复杂度

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
以下是我的暴力解code(超时),请问下这段code的时间复杂度是多少?
  1. class Solution {
  2.     public int countDigitOne(int n) {
  3.         int res = 0;
  4.         for (int i = 1; i <= n; i++) {
  5.             res += countEach(i);
  6.         }
  7.         return res;
  8.     }
  9.     public int countEach(int x) {
  10.         int count = 0;
  11.         while (x != 0) {
  12.             if (x % 10 == 1) {
  13.                 count++;
  14.             }
  15.             x /= 10;
  16.         }
  17.         return count;
  18.     }
  19. }
复制代码






上一篇:非典型刷题方法 FLAG拿了一家实习一家全职
下一篇:矩形密铺问题求解
🔗
usr_opta 2020-6-7 08:54:48 | 只看该作者
全局:
看 Solution Approach #1

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
lswalker 2020-6-7 08:58:36 | 只看该作者
全局:
countEach是O(log n), countDigitOne是O(log 1 + log 2 + ... + log n) = O(n log n). 相加这一步的严格证明可以用放缩法:

log 1 + ... + log n <= log n + ... + log n = n log n
log 1 + ... + log n = 1/2 ((log 1 + log n) + (log 2 + log (n-1)) + ... + (log n + log 1)) = 1/2 (log n + log 2(n-1) + ... + log n) >= 1/2 (log n + ... + log n) = 1/2 n log n

评分

参与人数 2大米 +2 收起 理由
KingofSand + 1 赞一个
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| 小水 2020-6-7 09:08:10 | 只看该作者
全局:
lswalker 发表于 2020-6-7 08:58
countEach是O(log n), countDigitOne是O(log 1 + log 2 + ... + log n) = O(n log n). 相加这一步的严格证 ...

谢谢解答!请问为什么countEach是O(logn)?
回复

使用道具 举报

🔗
 楼主| 小水 2020-6-7 09:09:01 | 只看该作者
全局:
usr_opta 发表于 2020-6-7 08:54
看 Solution Approach #1

Solution Approach #1是转换成String做的,跟我的方法不一样
回复

使用道具 举报

🔗
lswalker 2020-6-7 09:13:06 | 只看该作者
全局:
本帖最后由 lswalker 于 2020-6-7 09:14 编辑
小水 发表于 2020-6-7 09:08
谢谢解答!请问为什么countEach是O(logn)?

你的while循环里面每次把x除10,所以总共要走log n次循环,然后每次循环里面是O(1)的操作。log的底数不重要,复杂度都是一样的。
Edit: 可能有点confusion,我这里的x和n指的是一个东西,就是countEach的input哈

评分

参与人数 1大米 +1 收起 理由
小水 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表