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));
        }
    }
}
posted @ 2020-06-08 19:31  smsmdmx  阅读(109)  评论(0)    收藏  举报