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

[Leetcode] 跪求大佬帮我看看代码: LeetCode706 Design HashMap)

全局:

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

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

x
本人Java菜niao一枚,最近刚开始用Java刷题。刚学了一下MIT6.006的Hash Map的部分,就来练了一下力扣的706 (https://leetcode.com/problems/design-hashmap/)练练手。结果submit以后发现有wrong answer。苦思冥想了一整天还是没搞清楚自己错在哪里,跪求地里的高手指点一二。有指点必加米。先谢谢了!


  1. class ListNode {
  2.     public int key;
  3.     public int value;
  4.     public ListNode next;
  5.    
  6.     public ListNode(int key, int value) {
  7.         this.key = key;
  8.         this.value = value;
  9.     }
  10. }

  11. class MyHashMap {
  12.     private ListNode[] arr;
  13.     private int divisor = 2069;

  14.     /** Initialize your data structure here. */
  15.     public MyHashMap() {
  16.         this.arr = new ListNode[divisor];
  17.     }
  18.    
  19.     /** value will always be non-negative. */
  20.     public void put(int key, int value) {
  21.         int k = key%this.divisor;
  22.         if (arr[k]==null){
  23.             arr[k] = new ListNode(key, value);
  24.         } else {
  25.             ListNode cur = arr[k], prev = null;
  26.             while (cur!=null){
  27.                 if (cur.key == key) {
  28.                     cur.value = value;
  29.                     return;
  30.                 }
  31.                 prev = cur;
  32.                 cur = cur.next;
  33.             }
  34.             prev.next = new ListNode(key, value);
  35.         }
  36.     }
  37.    
  38.     /** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
  39.     public int get(int key) {
  40.         int k = key%this.divisor;
  41.         if (arr[k]==null) {
  42.             return -1;
  43.         } else {
  44.             ListNode cur = arr[k];
  45.             while (cur!=null) {
  46.                 if (cur.key == key) {
  47.                     return cur.value;
  48.                 }
  49.                 cur = cur.next;
  50.             }
  51.         }
  52.         
  53.         return -1;
  54.     }
  55.    
  56.     /** Removes the mapping of the specified value key if this map contains a mapping for the key */
  57.     public void remove(int key) {
  58.         int k = key%this.divisor;
  59.         if (arr[k]!=null) {
  60.             ListNode cur = arr[k], prev = null;
  61.             while (cur!=null) {
  62.                 if (cur.key == key) {
  63.                     if (prev!=null) {
  64.                         prev.next = cur.next;
  65.                     } else {
  66.                         arr[k] = null;
  67.                     }
  68.                     cur = null;
  69.                     break;
  70.                 }
  71.                 prev = cur;
  72.                 cur = cur.next;
  73.             }
  74.         }
  75.     }
  76. }

  77. /**
  78. * Your MyHashMap object will be instantiated and called as such:
  79. * MyHashMap obj = new MyHashMap();
  80. * obj.put(key,value);
  81. * int param_2 = obj.get(key);
  82. * obj.remove(key);
  83. */
复制代码




上一篇:求ReactJS的相关网络课程~
下一篇:请问如何找 follow up
推荐
hjy 2020-7-28 04:35:49 | 只看该作者
全局:
BobbyBear 发表于 2020-7-27 22:22
对啊!你这样一提醒我就突然看到问题了。多谢大佬!

没事,我也不是大佬,就是逛论坛走过顺便交流一下XD

评分

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

查看全部评分

回复

使用道具 举报

推荐
hjy 2020-7-27 13:31:05 | 只看该作者
全局:
本帖最后由 hjy 于 2020-7-27 13:34 编辑

楼主,我觉得如果你是删除链表的第一个节点,应该把后面的节点接到arr[k]吧?while loop 里面的else改一下这样试试?
  1. public void remove(int key) {
  2.         int k = key%this.divisor;
  3.         if (arr[k]!=null) {
  4.             ListNode cur = arr[k], prev = null;
  5.             while (cur!=null) {
  6.                 if (cur.key == key) {
  7.                     if (prev!=null) {
  8.                         prev.next = cur.next;
  9.                     } else {
  10.                         ListNode nextNode = cur.next;
  11.                         arr[k] = nextNode ;
  12.                     }
  13.                     cur = null;
  14.                     break;
  15.                 }
  16.                 prev = cur;
  17.                 cur = cur.next;
  18.             }
  19.         }
  20.     }
复制代码

评分

参与人数 2大米 +3 收起 理由
14417335 + 2
BobbyBear + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| BobbyBear 2020-7-27 22:22:44 | 只看该作者
全局:
hjy 发表于 2020-7-27 13:31
楼主,我觉得如果你是删除链表的第一个节点,应该把后面的节点接到arr[k]吧?while loop 里面的else改一下 ...

对啊!你这样一提醒我就突然看到问题了。多谢大佬!
回复

使用道具 举报

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

本版积分规则

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