题解 | #数据分类处理#

数据分类处理

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

// 序列I:15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数) 
// 序列R:5,6,3,6,3,0(第一个5表明后续有5个整数) 
// 按R<i>从小到大的顺序:
// (1)先输出R<i>; 
// (2)再输出满足条件的I的个数; 
// (3)然后输出满足条件的I在I序列中的位置索引(从0开始); 
// (4)最后再输出I。 
// 附加条件: 
// (1)R<i>需要从小到大排序。相同的R<i>只需要输出索引小的以及满足条件的I,索引大的需要过滤掉 
// (2)如果没有满足条件的I,对应的R<i>不用输出 
// (3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
            //记录序列I个数以及存储序列I的元素
            int numbers_I = scan.nextInt();
            int[] array_I = new int[numbers_I];
            for(int i = 0; i < numbers_I; i++){
                array_I[i] = scan.nextInt();
            }
            //记录序列R个数以及存储序列R的元素
            int numbers_R = scan.nextInt();
            int[] array_R = new int[numbers_R];
            for(int i = 0; i < numbers_R; i++){
                array_R[i] = scan.nextInt();
            }
            //对序列R排序
            Arrays.sort(array_R);
            //存储总的输出组,方便最后统一输出
            ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
            //记录输出总数,也就是输出的第一个数
            int count = 0;
            //标记序列R中元素在序列I中出现的次数
            int[] count_R = new int[numbers_R];
            //记录序列R元素是否在序列I中出现,也是方便输出
            boolean[] judge_R = new boolean[numbers_R];
            //一次判断序列R中元素是否在I序列中出现,并动态记录相应信息
            for(int i = 0; i < numbers_R; i++) {
                //辅助记录序列R中某元素在序列I中出现次数,方便输出
                int countR=0;
                //如果R中出现重复,只判断第一个元素,后面重复的略过
                if(i - 1 >= 0 && array_R[i] == array_R[i-1]) {
                    continue;
                }else {
                    //用来存储当前序列R元素在I中出现的坐标,方便输出
                    ArrayList<Integer> list_store_index_I = new ArrayList<Integer>();
                    for(int j = 0; j < numbers_I; j++) {
                        //不能直接array_I[i].toString(),因为int是基本类型
                        //但可以用以下方式
                        String s =Integer.toString(array_I[j]);
                        if(s.contains(Integer.toString(array_R[i]))){
                            //这一步可能重复赋值了,但无伤大雅
                            judge_R[i] = true;
                            //记录在序列I中出现下标
                            list_store_index_I.add(j);
                            //因为输出是 下标+元素,故+2
                            count += 2;
                            //只统计序列R中某元素在序列I中出现次数,故只用++
                            countR++;
                        }
                    }
                    if(!list_store_index_I.isEmpty()) {
                        list.add(list_store_index_I);
                        //这里不是count++,也应该是count+=2,因为是原数+个数
                        count += 2;
                        //标记序列R中某元素在序列I中出现的次数
                        count_R[i] = countR;
                    }
                }
            }
            //如果无满足条件I,则输出0即可
            if(list.isEmpty()) {
                System.out.print(0);
            }else{
                System.out.print(count + " ");
                int printlist_index = 0;
                for(int i = 0; i < numbers_R; i++) {
                    if(judge_R[i] == true) {
                        System.out.print(array_R[i] + " " + count_R[i] + " ");
                        ArrayList<Integer> outlist = new ArrayList<Integer>();
                        outlist = list.get(printlist_index);
                            for(int j = 0; j < outlist.size(); j++) {
                                System.out.print(outlist.get(j) + " " + array_I[outlist.get(j)]+" ");
                            }
                        printlist_index++;
                    }
                }
            }
            //记得换行,因为有可能有多组输入
            System.out.println();
        }

    }

}
全部评论

相关推荐

避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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