此题出自牛客网的华为机试在线训练专题
题目描述
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1
输入
4 0 1 0 2 1 2 3 4
输出
0 3 1 2 3 4
题解如下
import java.util.Map;
import java.util.TreeMap;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
Map<Integer,Integer> map = new TreeMap<>();
int n = sc.nextInt();
for(int i=0;i<n;i++){
int key = sc.nextInt();
int value = sc.nextInt();
if(map.containsKey(key)){
map.put(key,map.get(key)+value);
} else {
map.put(key,value);
}
}
for(Integer key : map.keySet()){
System.out.println(key +" "+map.get(key));
}
}
sc.close();
}
}
知识点总结
- TreeMap基于红黑树(Red-Black tree)的
NavigableMap
实现。该映射根据其键的自然顺序进行排序。 -
public Set<K> keySet()
返回此映射包含的键的 Set
视图。set 的迭代器将按升序返回这些键。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。此 set 支持元素移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作,可从映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
指定者:
指定者:
覆盖:
类 AbstractMap<K,V>
中的 keySet
返回:
此映射中包含的键的 set 视图