牛客网分组统计

版权声明:dream_on_sakura_rain https://blog.csdn.net/qq_32112175/article/details/88637774

先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例。

https://github.com/licunzhi/niuke/blob/master/src/com/sakura/aaaag/GroupingStatistics.java


package com.sakura.aaaag;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

/**
 * @ClassName GroupingStatistics
 * @Description 先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例。(这题理解起来相对有难度,我给做出了结果展示)
 * 输入格式展示:
 * 1
 * 7
 * |3| 2 3 8 8 2 |3|
 * |1| 2 3 2 1 3 |1|
 *  √             √
 * 输出格式展示
 * 1={2=0,3=2,8=1}
 * 2={2=1,3=0,8=1}
 * 3={2=1,3=1,8=0}
 *
 * 解释说明:第二行输入数据的1 上面对应的分别是 3 3 所以有两个3 因此3=2
 * @Author lcz
 * @Date 2019/03/17 19:53
 */
public class GroupingStatistics {
    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        int outer_count = scn.nextInt();// 外层进行循环次数
        for (int i = 0; i < outer_count; i++) {
            int inner_count = scn.nextInt();
            // 第一行作为value存储
            Map<Integer, Integer> allData = new TreeMap<>();
            List<Integer> valueList = new ArrayList<>();
            List<Map<Integer, Integer>> mapList = new ArrayList<>();
            for (int j = 0; j < inner_count; j++) {
                int value = scn.nextInt();
                valueList.add(value);
                allData.put(value, 0);
            }
            // key和value之间的关系合并
            for (int j = 0; j < valueList.size(); j++) {
                Map<Integer, Integer> keyMap = new HashMap<>();
                int key = scn.nextInt();
                keyMap.put(key, valueList.get(j));
                mapList.add(keyMap);
            }
            Map<Integer, List<Integer>> tempConvert = new TreeMap<>();
            for (Map<Integer, Integer> map : mapList) {
                for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                    if (tempConvert.get(entry.getKey()) != null) {
                        tempConvert.get(entry.getKey()).add(entry.getValue());
                    } else {
                        List<Integer> temp = new ArrayList<>();
                        temp.add(entry.getValue());
                        tempConvert.put(entry.getKey(), temp);
                    }
                }
            }

            // 格式化输出信息
            for (Map.Entry<Integer, List<Integer>> entry : tempConvert.entrySet()) {
                Map<Integer, Integer> params = new TreeMap<>();
                allData.forEach((k, v) -> params.put(k, v));
                List<Integer> integers = entry.getValue();
                for (Integer integer : integers) {
                    params.merge(integer, 0, (a, b) -> (params.get(integer) + 1) );
                }
                System.out.print(entry.getKey() + "={");
                List<String> message = new ArrayList<>();
                params.forEach((k, v) -> message.add(k + "=" + v));
                System.out.print(String.join(",", message));
                System.out.println("}");
            }

        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_32112175/article/details/88637774