题目来源自牛客网的网易算法题,如有侵权行为请告知删除。
题目是这样的:
小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。
输入描述:
输入包括两行:
第一行为序列长度n(1 ≤ n ≤ 50)
第二行为n个数sequence[i](1 ≤ sequence[i] ≤ 1000),以空格分隔
输出描述:
输出消除重复元素之后的序列,以空格分隔,行末无空格
输入例子:
9
100 100 100 99 99 99 100 100 100
输出例子:
99 100
移除重复元素对于JavaScript来说,可以将元素设置成某个对象的属性,如该属性存在,则该元素重复可以移除。对于每种元素保留最后出现的要求,则可以将输入的序列存入长度为n的数组,并使用reverse()将数组倒序,使得最后一次出现的元素成为第一次出现的元素。若元素第一次出现则设置为对象的属性,并将其存储进一个新数组data,当循环结束后,将data进行倒序并用join()转化成字符串即可。数组和字符串类型可以相互转换,使得算法变得简单。
程序如下:
process.stdin.resume();//回复输入流
process.stdin.setEncoding('utf8');
var input_stdin = "";//输入的全部数据
var input_stdin_array = "";//输入的每行数据以数组形式存在
var input_currentline = 0;//输入的行数
process.stdin.on('data', function (data) {//接收输入的数据
input_stdin += data;
if(data.slice(0,-1)==''){
process.stdin.emit('end');//输入空的回车结束输入
}
});
process.stdin.on('end', function () {//end触发
input_stdin_array = input_stdin.split("
");
main();//对输入进行操作
});
function readLine() {
return input_stdin_array[input_currentline++];//读取每一行的数据
}
function main(){
var n=readLine();
var seq=readLine().split(' ').reverse();//将输入的字符串转化为数组并倒置
var obj={};
var data=[];
for(var i=0;i<n;i++){
if(!obj[seq[i]]){
obj[seq[i]]=true;//设置seq[i]为obj的属性
data.push(seq[i])
}
}
var str=data.reverse().join(' ');
console.log(str);
}