描述
数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
提示:
0 <= index <= 11111111
1 <= value <= 100000
输入描述:先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开
输出描述:输出合并后的键值对(多行)
解释
该题与“HJ2 计算某字符出现次数”类似,主要运用Map来存储输入的键值对,相同key的值做聚合。由于涉及到key的排序,因此使用TreeMap来作为结构是最为合适的。
/*
* Copyright (c) waylau.com, 2022. All rights reserved.
*/
package com.waylau.nowcoder.exam.oj.huawei;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
/**
* HJ8 合并表记录.
* 描述:数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
* 输入描述:先输入键值对的个数n(1 <= n <= 500)
* 接下来n行每行输入成对的index和value值,以空格隔开
* 输出描述:输出合并后的键值对(多行)
*
* @author <a href="https://waylau.com">Way Lau</a>
* @since 2022-08-07
*/
public class HJ8MergeTableRecords {
public static void main(String[] args) {
// 输入一行,代表要计算值
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
// 构造一个TreeMap结构
Map<Integer, Integer> map = new TreeMap<>();
// 对输入字符串进行遍历,将每遍历一个字符,就将该字符记录到哈希中
int i = 0;
boolean flag = true;
while (flag) {
int index = sc.nextInt();
int value = sc.nextInt();
// 之前就记过,就累加个数;否则就记1
Integer valueInMap = map.get(index);
if (valueInMap != null) {
valueInMap += value;
} else {
valueInMap = value;
}
map.put(index, valueInMap);
i++;
// 总共执行num次
if (i == num) {
flag = false;
}
}
// 按照index值升序进行输出index、value
map.forEach((index, value) -> {
System.out.println(index + " " + value);
});
// 关闭资源
sc.close();
}
}
运行程序输出结果如下:
4
0 1
0 2
1 2
3 4
0 3
1 2
3 4
参考引用
- 本系列归档至https://github.com/waylau/nowcoder-exam-oj
- 《Java 数据结构及算法实战》:https://github.com/waylau/java-data-structures-and-algorithms-in-action
- 《数据结构和算法基础(Java 语言实现)》(柳伟卫著,北京大学出版社出版):https://item.jd.com/13014179.html

京公网安备 11010502036488号