题解 | #数据分类处理#

数据分类处理

https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd

import java.util.*;

public class Main {
    public static void main(String[] args) {
        //输入
        Scanner in = new Scanner(System.in);
        int inum = in.nextInt();
        //序列I
        int[] iints = new int[inum];
        for (int i = 0; i < inum; i++) {
            iints[i] = in.nextInt();
        }
        int rnum = in.nextInt();
        //序列R
        int[] rints = new int[rnum];
        for (int i = 0; i < rnum; i++) {
            rints[i] = in.nextInt();
        }

        HashMap<Integer, String> map1 = new
        HashMap<>();//记录每个R<i>与其对应的I值
        HashMap<Integer, Integer> map2 = new
        HashMap<>();//记录每个R<i>存在I值的数量

        //对R<i>去重并排序
        sort(rints);

        //遍历数据 并存入
        for (int i = 0; i < rints.length; i++) {
            if (i >= 1 && rints[i] == rints[i - 1]) {
                continue;
            }
            Integer integer = Integer.valueOf(rints[i]);
            String s = String.valueOf(integer);
            for (int j = 0; j < iints.length; j++) {
                String s1 = String.valueOf(iints[j]);
                //包含
                if (s1.contains(s)) {
                    //添加值
                    String s2 = map1.get(integer);
                    String k = j + " " + s1;//索引值+对应的I
                    if (s2 != null) {
                        map1.put(integer, s2 + " " + k);
                    } else {
                        map1.put(integer, k);
                    }
                    //计数
                    Integer integer1 = map2.get(integer);
                    if (integer1 != null) {
                        map2.put(integer, integer1 + 1);
                    } else {
                        map2.put(integer, 1);
                    }
                }
            }
        }
        String result = "";
        for (int i = 0; i < rints.length; i++) {
            if (i >= 1 && rints[i] == rints[i - 1]) {
                continue;
            }
            Integer integer = Integer.valueOf(rints[i]);
            if (null != map2.get(integer)) {
                String s = String.valueOf(integer);
                result += " " + s + " " + map2.get(integer) + " " + map1.get(integer);
            }
        }
        int length = result.split(" ").length - 1;
        System.out.print(length + result);
    }

    private static void  sort(int[] rints) {
        int length = rints.length;
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 1; j++) {
                if (rints[j] > rints[j + 1]) {
                    //交换
                    int tmp = rints[j];
                    rints[j] = rints[j + 1];
                    rints[j + 1] = tmp;
                }
            }
        }
    }

}

解题思路:

1, 整体数据梳理过程稍显复杂, 考虑将其拆解进行处理,

2, 最终输出时的排序和去重, 使用R<i>数组进行控制,

3, 数据的梳理组合在整体遍历时进行处理

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务