题解 | #合并表记录#

合并表记录

http://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201

这个采用hash表存放数据就好了,每次输入查询是否有存在的key,存在就将value累加到表中,最后输出表。

  • java
    import java.util.*;
    public class Main {
     public static void main(String agv[]) {
          Scanner scanner = new Scanner(System.in);
          int tableSize = scanner.nextInt();
          Map<Integer, Integer> table = new HashMap<>(tableSize);
          for (int i = 0; i < tableSize; i++) {
              int key = scanner.nextInt();
              int value = scanner.nextInt();
              if (table.containsKey(key)) {
                  table.put(key, table.get(key) + value);
              } else {
                  table.put(key, value);
              }
          }
           for (Integer key : table.keySet()) {
              System.out.println( key + " " + table.get(key));
          }
      }
    }
全部评论
你这个没有考虑过超出Integer值范围
1 回复 分享
发布于 2022-04-24 15:46
对于顺序验证过: Hashtable.keySet()-降序;TreeMap.keySet()-升序;HashMap.keySet()-乱序;LinkedHashMap.keySet() 原序。此处要求升序,可用TreeMap
29 回复 分享
发布于 2021-12-12 11:21
key没有排序,跑不过用例吧
27 回复 分享
发布于 2021-10-20 16:24
楼主大才,hashmap默认是不排序的,但是由于键入的key是int,int值的hash还是Int,只要键入的值小于此时hashmap的初始化大小的数组的时候,就会将键入的值放入数组中,放入的规则是根据hash值也就是键入的int值的大小。所以会排序。
16 回复 分享
发布于 2022-08-04 16:04
太厉害了 楼主用到了hashmap底层原理 其中最关键的是楼主直接创建的是tablesize的集合这样每个key占用一个位置 不会生成链表 否则最后得到的hashmap会产生链表不是一一对应顺序不能实现排序
12 回复 分享
发布于 2022-08-27 15:56 湖南
实例化HashMap时少了一个size ,死活都过不去
7 回复 分享
发布于 2021-11-10 11:33
这个是不对的,自己写了个用例是跑不过的,只能说作者的测试用例太不健全了,这种东西还是要去排序才可以 测试用例:20 1 6 23 6 5 6 8 6 1 9 0 20 2 30 6 6 7 7 8 9 10 9 8 9 20 21 20 5 27 6 56 9 89 9 89 5 25 6 56 10
5 回复 分享
发布于 2022-12-12 10:58 广东
你这不排序能过?
3 回复 分享
发布于 2022-03-02 19:17
这个题有问题,key和value 是一行,你这是用两行。
2 回复 分享
发布于 2021-11-27 11:30
要对huashMap的哈希有了解才知道他是怎么通过hashMap排序的
2 回复 分享
发布于 2022-07-16 16:43
将HashMap改为treeMap,不用设置size,速度更快,亲测
2 回复 分享
发布于 2022-09-25 17:33 广东
这个解法的问题是:输入的key-value的key小于hashmap的容量时是正确的,比如输入的size是4,那下面的四组数据的key都不能超过4,否则就无法做到升序。因为hashmap的size必须是2的次方的大小,输入size=5,则hashmap的容量其实是2的3次方 = 8.这时候,key小于8的int值可以升序输出,超过(包括)8的话,就不是升序了。
2 回复 分享
发布于 2023-03-07 14:41 陕西
这个已经不能跑过测试用例了,现在需要把HashMap改成HashTree
1 回复 分享
发布于 2022-04-15 23:32
没排序,不过
1 回复 分享
发布于 2022-06-04 19:33
你能不能能跑一遍再来发,让大家给你检查错误吗
1 回复 分享
发布于 2022-06-12 16:48
for(Integer index : map.keySet()){ indexs.add(index); } Collections.sort(indexs); for(Integer i=0;i
1 回复 分享
发布于 2022-06-28 23:47
用TreeMap
1 回复 分享
发布于 2022-07-13 22:12
假如测试用例规定index是从0开始依次递增,每次加1的,那这个代码是OK的。可惜按题目的说法并不是这样。 因为如果是从0开始每次加1,那么就可以把第一行输入的数字初始化为HashMap的初始容量,由于Integer类型的hashCode返回值就是对应的int值,所以每次put的时候就相当于依次往map内部的数组赋值,永远不会发生hash冲突,最后的keySet也就是有序的了。 这个用hashMap的代码我测试了是可以通过的,但是不代表这就是正确的答案。
1 回复 分享
发布于 2023-02-16 22:27 湖北
没排序 没跑过的也发上来吗 有点离谱 还有点赞的
1 回复 分享
发布于 2023-03-05 00:09 广东
这个改成TreeMap就好了,你这样写没排序,不对的
1 回复 分享
发布于 2023-03-13 19:55 上海

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
97 11 评论
分享
牛客网
牛客企业服务