Java题解 | HJ8 #合并表记录#

合并表记录

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

描述

数据表记录包含表索引index和数值valueint范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

提示:

0 <= index <= 11111111

1 <= value <= 100000

输入描述:先输入键值对的个数n1 <= n <= 500

接下来n行每行输入成对的indexvalue值,以空格隔开

输出描述:输出合并后的键值对(多行)

解释

该题与“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

参考引用

#华为机考#
全部评论

相关推荐

gcniz:一天写两千行你闹呢
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务