华为机试题:数据分类处理

来源:互联网 发布:类似yolo的软件 编辑:程序博客网 时间:2024/05/17 06:22

题目描述

信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、QQ用户、手机号码、银行帐号等信息及活动记录。 

采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。


输入描述:

一组输入整数序列I和一组规则整数序列RIR序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~0xFFFFFFFF,序列个数不限



输出描述:

R依次中取出R<i>,对I进行处理,找到满足条件的I<j> 

I<j>整数对应的数字需要连续包含R<i>对应的数字。比如R<i>23I<j>231,那么I<j>包含了R<i>,条件满足 。 

R<i>从小到大的顺序:

(1)先输出R<i> 

(2)再输出满足条件的I<j>的个数; 

(3)然后输出满足条件的I<j>I序列中的位置索引(0开始) 

(4)最后再输出I<j> 

附加条件: 

(1)R<i>需要从小到大排序。相同的R<i>只需要输出索引小的以及满足条件的I<j>,索引大的需要过滤掉 

(2)如果没有满足条件的I<j>,对应的R<i>不用输出 

(3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)

 

序列I15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数) 

序列R5,6,3,6,3,0(第一个5表明后续有5个整数) 

输出:30, 3,6,0,123,3,453,7,3,9,453456,13,453,14,123,6,7,1,456,2,786,4,46,8,665,9,453456,11,456,12,786

说明:

30----后续有30整数

3----从小到大排序,第一个R<i>0,但没有满足条件的I<j>,不输出0,而下一个R<i>3

6--- 存在6个包含3I<j> 

0--- 123所在的原序号为0 

123--- 123包含3,满足条件 


输入例子:
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 1235 6 3 6 3 0

输出例子:
30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786
java代码实现:
import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.Scanner;import java.util.TreeSet;public class Main{public static int[] sortedNoRepString(String str) {TreeSet<String> myset = new TreeSet<>();String[] strArr = str.split(" ");for (int i = 1; i < strArr.length; i++) {myset.add(strArr[i]);}int[] intArr = new int[myset.size()];Iterator<String> iterator = myset.iterator();int n = 0;while (iterator.hasNext()) {intArr[n] = Integer.parseInt(iterator.next());n += 1;}Arrays.sort(intArr);return intArr;}public static ArrayList<String> datapro(String str01, int[] intArrTemp) {int k = 0;String[] strArr01 = str01.split(" ");ArrayList<String> arrayList = new ArrayList<>();for (int i = 0; i < intArrTemp.length; i++) {StringBuilder stringBuilder = new StringBuilder();for (int j = 1; j < strArr01.length; j++) {if (strArr01[j].contains(intArrTemp[i]+"")) {k += 1;int temp = j - 1;stringBuilder.append(temp + " " + strArr01[j] + " ");}}if (k != 0) {String strtemp = intArrTemp[i] + " " + k + " " + stringBuilder.toString();arrayList.add(strtemp);k = 0;}}return arrayList;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);        while(scanner.hasNext()){            String stringI = scanner.nextLine();String stringR = scanner.nextLine();int[] intTemp = sortedNoRepString(stringR);ArrayList<String> resultList = datapro(stringI, intTemp);StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < resultList.size(); i++) {sBuilder.append(resultList.get(i));}String sTemp = sBuilder.toString().trim();int sunNum = sTemp.split(" ").length;sTemp = sunNum +" "+sTemp.toString();System.out.println(sTemp.trim());        }}}


0 0