华为OJ 初级:合并表记录

本文介绍了一种通过使用HashMap实现表记录合并的方法,重点在于如何处理相同索引的记录并将其数值进行求和。文章提供了完整的Java代码示例,包括主函数与遍历输出合并后键值对的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和

 

函数说明:

public int mergeRecord(List oriList, List rstList)

数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和。


 @param oriList 原始表记录。 以List方式存放,TableRecord定义见TableRecord.java,

                调用者无需对leRecord.java做任何修改
 @param rstList 合并后的表记录 , 以List方式存放
 @return  返回合并后表的个数

 

 

知识点
运行时间限制 10M
内存限制 128
输入

先输入键值对的个数
然后输入成对的index和value值,以换行符隔开

输出

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

样例输入 4 0 1 0 2 1 2 3 4
样例输出 0 3 1 2 3 4
/**
 * 思路:合并表记录,由于记录是由键值对组成的,所以首先想到的是可以存储键值对的Map
 * 	   Map中有HashMap与TreeMap,但是要保持输入时的顺序,而TreeMap会按照key的值进行排序,所以选择HashMap
 * 	   HashMap的key是唯一的,所以当输入的key和HahMap中已有的key相等时,把该key对应的value和输入的value值相加即可
 **/
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();    //需要输入的键值对数
		HashMap<Integer, Integer> hasMap = new HashMap<>(); //定义HashMap
		for (int i = 0; i < n; i++) {
			int keys = scanner.nextInt();    //输入key
			int values = scanner.nextInt();  //输入value
			int temp = 0;
			if (hasMap.containsKey(keys)) {  //当输入的key是HashMap中已有的key时
				temp = hasMap.get(keys) + values;  //把该key对应的value和输入的value相加
				hasMap.put(keys, temp);
			}else {
				hasMap.put(keys, values); //当不是已有的key时,直接输入key和value
			}
		}
		scanner.close();
		forEach(hasMap.entrySet());
	}
	static void forEach(Iterable<Map.Entry<Integer, Integer>> iterable){ //定义方法答应key和value的值
		for(Map.Entry<Integer, Integer> entry : iterable){
			System.out.println(entry.getKey());
			System.out.println(entry.getValue());
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值