题解 | #合并表记录#

合并表记录

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

hashmap默认是不排序的,

但是由于键入的key是int,int值的hash还是Int,

只要键入的值小于此时hashmap的初始化大小的数组的时候,就会将键入的值放入数组中,

放入的规则是根据hash值也就是键入的int值的大小。

所以从hashmap的底层原理出发,实现了排序。

https://juejin.cn/post/7182597553110646821

但是其实这个方法是错误的。因为这个解法的问题是:输入的key-value的key小于hashmap的容量时是正确的,比如输入的size是4,那下面的四组数据的key都不能超过4,否则就无法做到升序。因为hashmap的size必须是2的次方的大小,输入size=5,则hashmap的容量其实是2的3次方 = 8.这时候,key小于8的int值可以升序输出,超过(包括)8的话,就不是升序了。

4
0 1
0 2
1 2
20 4


import java.util.Scanner;
import java.util.*;
public class Main {
    public static void main(String agv[]) {
        Scanner scanner = new Scanner(System.in);
        int tableSize = scanner.nextInt();//读取table的大小
        Map<Integer, Integer> table = new HashMap<>(tableSize);//新建一个hashtable
        for (int i = 0; i < tableSize; i++) {//对于每一行
            int key = scanner.nextInt();
            int value = scanner.nextInt();
            if (table.containsKey(key)) {//如果存在key
                table.put(key, table.get(key) + value);//那么就相加
            } else {
                table.put(key, value);//不然就直接放置key 和 value
            }
        }
        for (Integer key : table.keySet()) {
            System.out.println( key + " " + table.get(key));
        }
    }
}


正确的使用treemap的解法

import java.util.Scanner;
import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        TreeMap<Integer, Integer> map = new TreeMap<>(); // 输出结果要求有序!
       while(sc.hasNextInt()){
            int n = sc.nextInt();
            for(int i = 0; i < n; ++i){
                int a = sc.nextInt();
                int b = sc.nextInt();
                map.put(a,map.getOrDefault(a,0) + b);
            }
       }
       for (Integer i : map.keySet()) {
           System.out.println(i + " " + map.get(i));
       }
    }
}

全部评论

相关推荐

兄弟们,实习都是在接各种api,该怎么包装简历
仁者伍敌:感觉我自己做小项目也是各种api啊,我要怎么包装简历
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务