楼主: mxc19912008
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 重点算法-刷题必备Algorithms 4th edition

 
🔗
marimo 2017-7-14 03:42:59 | 只看该作者
全局:
这个很棒,谢谢楼主
回复

使用道具 举报

🔗
 楼主| mxc19912008 2017-7-16 00:21:07 | 只看该作者
全局:
举一个自己comment代码,加深理解的例子:
无评论版 3.2 binary search ST.java中,在无Comment的代码后添加自己的理解,不会让自己一目十行的看,而是进行了思考。会发现int i = rank(key)这里的i会出现异常,所以要加入i < n这样的约束;也会发现keys[i].compareTo(key) == 0这样的约束。提升自己写出bug free代码的能力。
  1. public Value get(Key key) {
  2.         if (key == null) throw new IllegalArgumentException("argument to get() is null");
  3.         if (isEmpty()) return null;//不能用linkedlist里面 first==null的办法了
  4.         int i = rank(key); //rank是用到了binary search,不用再从头开始O(n)寻找了
  5.         if (i < n && keys[i].compareTo(key) == 0) return vals[i];//当只有1个key的时候(n=1,i=0),
  6.         //而且查找的key比这个key大,rank就会输出1,所以要用i < n来约束,这也是一个corner case.
  7.         //例如输入c,查找d的rank就会输出1.已经测试过。
  8.         //同时,这个key也可能不在array里,所以要进行keys[i].compareTo(key) == 0的比较
  9.         //(rank返回的是1.key在array里,key的位置;2.key不在array里,如果插入key,key的位置)
  10.         return null;
  11.     }
  12.     public int rank(Key key) {
  13.         if (key == null) throw new IllegalArgumentException("argument to rank() is null");

  14.         int lo = 0, hi = n-1;
  15.         while (lo <= hi) {
  16.             int mid = lo + (hi - lo) / 2;
  17.             int cmp = key.compareTo(keys[mid]);
  18.             if      (cmp < 0) hi = mid - 1;
  19.             else if (cmp > 0) lo = mid + 1;
  20.             else return mid;
  21.         }
  22.         return lo;
  23.     }
复制代码
回复

使用道具 举报

🔗
eudemon 2017-7-17 09:24:13 | 只看该作者
全局:
很不错。不过有ios 的版本不?
回复

使用道具 举报

🔗
newgod2500 2017-7-17 10:04:41 | 只看该作者
全局:
谢谢楼主。Github已星+大米已加!iOS 用户期待一下
回复

使用道具 举报

🔗
 楼主| mxc19912008 2017-7-17 21:51:42 | 只看该作者
全局:
newgod2500 发表于 2017-7-17 10:04
谢谢楼主。Github已星+大米已加!iOS 用户期待一下

感谢感谢!iOS自学中,等iOS出来我私信你哈!
回复

使用道具 举报

🔗
 楼主| mxc19912008 2017-7-17 21:54:49 | 只看该作者
全局:
eudemon 发表于 2017-7-17 09:24
很不错。不过有ios 的版本不?

感谢支持!iOS还在自学中,等iOS出来我私信你哈!
回复

使用道具 举报

无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
🔗
xnliu67 2017-7-26 23:52:59 | 只看该作者
全局:
支持lz,但是举的小例子好像有点问题。。
leetcode那段的line 13
  1. return 1 + Math.max(root.left, root.right);
复制代码
应该改为
  1. return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
复制代码
回复

使用道具 举报

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

本版积分规则

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