📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
12
返回列表 发新帖
楼主: Kells
跳转到指定楼层
上一主题 下一主题
收起左侧

空气床电面

🔗
tangvictor 2019-1-28 23:40:08 | 只看该作者
全局:
blueiceni 发表于 2019-1-28 01:18
这样的是迭代没错的。不过这样完全没有优化(比如最基本的2^n就是n步,hash存下已经算过的步数之类的)的 ...

对是的,加了个cache存一下
  1. private static int findLongestIterative(int n) {
  2.     if (n < 1) {
  3.       return 0;  
  4.     }
  5.    
  6.     int longest = 1;
  7.     Map<Integer, Integer> map = new HashMap<>();
  8.     map.put(1, 1);
  9.    
  10.     for (int i = 2; i <= n; i++) {
  11.       int step = 0, num = i;
  12.       while (num != 1 && num >= i) {
  13.         if (num % 2 == 0) {
  14.           num /= 2;
  15.         } else {
  16.           num = 3 * num + 1;
  17.         }
  18.         step++;
  19.       }
  20.       map.put(i, step + map.get(num));
  21.       longest = Math.max(longest, map.get(i));
  22.     }
  23.    
  24.     return longest;
  25.   }
复制代码



回复

使用道具 举报

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

本版积分规则

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