题目链接-牛客
将两个整型数组按照升序合并,并且过滤掉重复数组元素。
输出时相邻两数之间没有空格。
输入说明,按下列顺序输入:
输出合并之后的数组
输入:
3
1 2 5
4
-1 0 3 2
输出:
-101235
let arr_num = 2;
let num;
let ans = [];
while (arr_num--) {
num = readline();
let temp = readline();
temp = temp.split(" ");
temp = Array.from(new Set(temp));
temp = temp.sort();
ans.push(temp);
}
function flat(input){
const stack = [...input];
const res = [];
while(stack.length){
const next = stack.pop();
if(Array.isArray(next)){
stack.push(...next);
}else{
res.push(next);
}
}
return res.reverse();
}
ans = flat(ans);
ans = Array.from(new Set(ans));
ans.sort((a , b) => {
return a - b;
})
ans = ans.join("")
console.log(ans);
看见这个题目的第一眼就想到了JS中的数组去重Set,所以就选择使用js去写题目了
首先这个题目其实思路很简单,就是输入后,升序,去重,然后输出
其实,开始的时候,我都没注意到,就第一眼被数组去重吸引了,就没注意到升序还有需要输入四个数,然后还有几个js基础问题,提交了一共6次……
readline是string我通过readline函数读取输入的字符,开始我想当然的以为这就是一个数组,结果处理的时候一直报错,不能使用原型链Array中的方法
于是使用split(" ")分割字符串,变为数组
flat处理后,变成一个二维数组,于是就像通过flat方法直接扁平化,但是牛客的js环境貌似不支持该方法,于是就手写了一个flat方法
其实flat的源码也挺简单的
...扩展运算符解构输入的值pop方法拿出栈头的元素继续push(...next)res数组中完成后,记得通过reverse函数返回原顺序的数组,因为是从后至前去遍历的,所以需要逆序一下
function flat(input){
const stack = [...input];
const res = [];
while(stack.length){
const next = stack.pop();
if(Array.isArray(next)){
stack.push(...next);
}else{
res.push(next);
}
}
return res.reverse();
}
直接通过Array.from(new Set(数组))即可完成数组区中,借用Set的数据结构完成
sort函数的排序方式sort函数的是通过ASCII码去排序的,所以会出现这样的情况
原数组为2,3,6,8,11
结果却为
11 2 3 6 8

因为1的ASCII码更小,所以被放在了第一位,所以需要重写
ans.sort((a , b) => {
return a - b;
})
若需要降序,将a,b两者反过来即可
join最后题目结果需要输出的是不带空格的输出格式,所以需要将数组转换为字符串
直接通过join函数转换即可
ans = ans.join("")