最近在找工作,总是接触到华为OD的岗位,也就想看看机试题都考些啥,让我崩溃的不是算法,而是牛客网的编程体验。
有一道题叫明明的随机数,先输入一个N,后面会输入N个数,对这些去重然后从小到大排序。
我用的是JavaScript Node, 会默认初始化出这样的代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
while(line = await readline()){
let tokens = line.split(' ');
let a = parseInt(tokens[0]);
let b = parseInt(tokens[1]);
console.log(a + b);
}
}()
我花了很多时间想着怎么把所有的输入都拿到,当然一部分原因是我没有仔细看输出,还有就是在HJ2 计算某字符出现次数中,我通过await readline()在while拿到了第二个参数。
后来发现根本不行,这次是有多少入参就会进几次while循环。
看了题解后发现了这样的写法
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const nums=[]
let clearNums=[]
rl.on('line', function (line) {
nums.push(line);
if(nums.length-1===Number(nums[0])){
nums.shift();
clearNums=Array.from(new Set(nums));
clearNums.sort((a,b)=>{return a-b})
clearNums.forEach(f=>{
console.log(f)
})
}
});
好家伙,我得到入参还要搞这么一套复杂的操作,然后还要把数组里面的一个个打印出来才能算对。
这输入和输出跟算法有什么关系?这道题被定义为困难的原因主要是在这呗。
如果选择TypeScript,默认代码是会有rl.on('line',这不看已有答案真是触碰到知识盲区了,JavaScript V8 据说在某次改版中没有了。