008合并表记录
题目描述
数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1
输入
4 0 1 0 2 1 2 3 4
输出
0 3 1 2 3 4
我的解答
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNextInt()) {
//键值对个数
int num = input.nextInt();
//int型数组存放键值对
//其中数组下标i对应index,数组元素target[i]对应value
int[] target = new int[num];
//先将其全部置为-1
for (int i = 0; i < num; i++) {
target[i] = -1;
}
for (int i = 0; i < num; i++) {
//取得index
int index = input.nextInt();
//取得valuevalue
int value = input.nextInt();
//数组下标为index中值为-1代表之前没有存放键值对
if (target[index] == -1) {
//初始化中target[index]为-1 先+1再存放value
target[index] = target[index] + 1 + value;
} else {
//之前存放过键值对 则直接合并
target[index] = target[index] + value;
}
}
//遍历输出 存放的键值对
for (int i = 0; i < num; i++) {
if (target[i] != -1) {
System.out.println(i + " " + target[i]);
}
}
}
}
}
//缺陷 我设计-1是没有对应记录 但有可能运算的结果等于-1
//参考别人
//HashMap HashSet
//TreeMap TreeSet
//TreeMap写法 不重复 排序
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNextInt()) {
//声明TreeMap
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
//获取键值对的个数
int num = input.nextInt();
//对输入的键值对操作
for (int i = 0; i < num; i++) {
//获取key
int key = input.nextInt();
//获取value
int value = input.nextInt();
//判断TreeMap中是否存在key
if (treeMap.containsKey(key)) {
//如果存在 先把key对应的value取出
//把合并后的key value存入 覆盖
treeMap.put(key, treeMap.get(key) + value);
} else {
//不存在直接put
treeMap.put(key, value);
}
}
//遍历输出
for (Integer key : treeMap.keySet()) {
System.out.println(key + " " + treeMap.get(key));
}
}
}

浙公网安备 33010602011771号