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

请教一道题

全局:

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

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

x
给定公式为2^i * 3^j * 5^k * 7^l, 其中i,j,k,l为非负整数。根据不同的i/j/k/l这个公式可以生成不同的数,把这些数从小到大排列,要求找出其中第n个数字。要求用O(n)的时间。这个是Leetcode上的题吗?

本质就是找出所有质因子只有2/3/5/7的数字里面的第n个,感觉应该用类似筛法把11及以上所有质数的倍数去掉,然后剩下的数第n个数就是结果。有几个问题:
1. 筛法的数组应该开多大?这个跟Leetcode 204不一样,并不是划倍数划到n就可以了,因为这里的第n个数肯定要大于n。数组开到多大保险?感觉2n应该就够了吧?不过这个能证明吗?还是随着n的增大数组越来越大?那就得动态扩容?不过这样是不是就没法保证O(n)了?
2. 另外筛法本身也不是O(n)的,而是O(n log log n)。当然可以argue如果n是int型的,log log n最大也就3.07。不知道有没有确实是O(n)的方法?因为毕竟不是要求找出前n个数,而是仅仅要第n个数,是否有办法能更快?

如果不用筛法,直接遍历i/j/k/l的各种组合是不是更慢?有没有一种遍历法可以保证生成的数字递增?

上一篇:自我监督打卡
下一篇:Queue Reconstruction by Height这道题死活看不懂
🔗
 楼主| redpearl 2018-3-17 07:27:09 | 只看该作者
全局:
原来这是Leetcode 264 Ugly Number II啊
回复

使用道具 举报

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

本版积分规则

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