# HJ25 数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd (opens new window)
# 描述
示例:
输入:
8 112 113 114 115 116 222 223 224
3 22 11 33
输入说明:
8 // 有 8 个待处理的数据
112
113
114
115
116
222
223
224
3 // 有 3 个处理规则
22
11
33
输出:
20 11 5 0 112 1 113 2 114 3 115 4 116 22 3 5 222 6 223 7 224
输出说明:
对 3 个处理规则进行排序
20 // 有 20 个处理后的数
11 5 // 包含 11 的有 5 个,逐个列出它们的 索引和数据
0 112
1 113
2 114
3 115
4 116
22 3 // 包含 22 的有 3 个,逐个列出它们的 索引和数据
5 222
6 223
7 224
// 包含 33 的有 0 个,则不打印
# 解答
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
let line;
let lines = [];
while ((line = await readline())) {
lines.push(line);
}
let dataNums = lines[0]
.split(" ")
.slice(1)
.map((item) => parseInt(item));
let ruleNums = lines[1]
.split(" ")
.slice(1)
.map((item) => parseInt(item));
// 去重
ruleNums = Array.from(new Set(ruleNums).values());
// 排序
ruleNums.sort((a, b) => a - b);
const matchedRuleNumsList = new Array(ruleNums.length);
for (let i = 0, iLen = ruleNums.length; i < iLen; i++) {
const ruleNumStr = String(ruleNums[i]);
const matchedRuleNums = [];
matchedRuleNumsList[i] = matchedRuleNums;
for (let j = 0, jLen = dataNums.length; j < jLen; j++) {
const dataNumStr = String(dataNums[j]);
if (dataNumStr.includes(ruleNumStr)) {
matchedRuleNums.push([j, dataNums[j]]);
}
}
}
let results = [];
for (let i = 0, len = ruleNums.length; i < len; i++) {
const ruleNum = ruleNums[i];
const matchedRuleNums = matchedRuleNumsList[i];
if (matchedRuleNums.length === 0) {
continue;
}
const ruleNumResult = [ruleNum, matchedRuleNums.length];
matchedRuleNums.forEach(([index, num]) => {
ruleNumResult.push(index);
ruleNumResult.push(num);
});
results = results.concat(ruleNumResult);
}
results.unshift(results.length);
console.log(results.join(' '));
})();
上一篇: 下一篇:
本章目录