前端笔试算法题,提⾼笔试存活率!(持续更新)
⼀、前⾔
1. 校招笔试马上开始,整理⼀些算法题⼀起学习.
2. 我统⼀使⽤Javscript(V8/Node)解答,都已经调试通过.
3. ⼀起加油!⼀起进步!
⼆、题⽬
字符串拼接
提交链接:
题⽬:
不借⽤任何字符串库函数实现⽆冗余地接受两个字符串,然后把它们⽆冗余的连接起来。
输⼊描述:
每⼀⾏包括两个字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据,
⽰例1
输⼊
abc def
输出
abcdef
/*
*解题思路:这道题⽬⽐较简单,只需要把字符串分割成数组去掉空格后,再拼接在⼀起转换成字符串即可
*/
let readline = require('readline');
let rl =  ateInterface({
input:process.stdin, //输⼊流
output:process.stdout
})
let str = '';
<('line',function(input){
let strArr = im().split(' '); //trim()清空前后的空格.
//split(' '),从字符串的空格切分成数组 'abc def'变成['abc','def']
if(strArr.length == 2){
str = strArr[0] + strArr[1];
console.log(str);
return str;
}
})
查重复元素
提交链接:
题⽬:
出数组 arr 中重复出现过的元素
⽰例1
输⼊
[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出
[1, 3, 4]
/**
*解题思路:新建⼀个数组⽤来存放重复的元素。利⽤indexOf(元素)获取数组元素下标,如果返回⾮-1的数,说明存在这个元素,添加到新数组中。只需要⽤⾃⾝去和后⾯的元素对⽐即可,前⾯的数已经在前⾯循*/
function duplicates(arr) {
let optArr = [];    //新数组
for(var i=0;i<arr.length;i++){
let jugleArr = arr.slice(i+1,arr.length); //获取⾃⾝值后⾯的所有元素
//slice(start,end)返回相应位置的元素,slice⽅法不改变原数组。
//先判断jugleArr数组⾥的所有元素是否和arr[i]重复
//如有,再判断当前元素是否加⼊了optArr,如没有,返回-1
if(jugleArr.indexOf(arr[i]) != -1 && optArr.indexOf(arr[i]) == -1){
optArr.push(arr[i]);indexof空格算不算
}
}
console.log(optArr); //[1,4,3]
return optArr;
}
duplicates([1,2,4,4,3,3,1,5,3]);
替换空格
提交链接:
请实现⼀个函数,将⼀个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.
则经过替换之后的字符串为We%20Are%20Happy
/*
*解题思路:利⽤简单的正则获取空格,并且替换成%20即可。
部分正则规则:/g 匹配所有符合条件的元素. \d:表⽰数字  ^:表⽰开头  $:表⽰结尾  +:匹配多个
例如: ^\d+$ 匹配的字符串只能是数字
*/
let readline = require('readline');
let rl = ateInterface({
input:process.stdin,
output:process.stdout
})
<('line',function(input){
// let result = deal(input);
let result = im().replace(/ /g,'%20');  //replace(获取值,替换值)
console.log(result);
return result;
})
求最⼤值和最⼩值
提交链接:
题⽬:
输⼊N个(N<=10000)数字,求出这N个数字中的最⼤值和最⼩值。每个数字的绝对值不⼤于1000000。
输⼊描述:
输⼊包括多组测试⽤例,每组测试⽤例由⼀个整数N开头,接下去⼀⾏给出N个整数。
输出描述:
输出包括两个整数,为给定N个数中的最⼤值与最⼩值。
⽰例1
输⼊
5
1 2 3 4 5
3
3 7 8
输出
5 1
8 3
/*
* 解题思路:可以利⽤Math的max和min⽅法判断,但是注意:max和min不⽀持数组,⽀持多个值传⼊.可以利⽤apply解决
*/
let readline = require('readline');
let rl = ateInterface({
input:process.stdin,
output:process.stdout,
})
let num = 0;
<('line',function(input){
//初始值是整数长度.赋值给num
if(num == 0){
num = im();//去除前后的空格
}
else{
let iptArr = input.split(' ')
if(iptArr.length == num){
let maxNum = Math.max.apply(null,iptArr)//Math.min(),Math.max(),其参数不能是数组,⽽是单个元素值
let minNum = Math.min.apply(null,iptArr)//apply可以将⼀个数组默认的转换为⼀个参数列表([param1,param2,param3] 转换为 param1,param2,param3)            let result = maxNum + ' ' + minNum;
console.log(result);
return result
}
}
})
统计字符
提交链接:
题⽬描述:
给定⼀个英⽂字符串,请写⼀段代码出这个字符串中⾸先出现三次的那个英⽂字符(需要区分⼤⼩写)。
输⼊描述:
输⼊数据⼀个字符串,包括字母,数字等。
输出描述:
输出⾸先出现三次的那个英⽂字符
⽰例1
输⼊
Have you ever gone shopping and
输出
e
/*
*  解题思路:可以利⽤对象的属性添加新字符,值则是这个字符的出现的次数.
*  对象添加属性(key): 对象[属性名]:value
*
*  扩展:对象属性通过点(.) 和⽅括号([]) 的不同之处:
*  通过点运算符(.)⽅法对象属性时,属性名⽤⼀个标识符来表⽰。标识符必须直接出现再js程序中,它们不是数据类型,因此程序⽆法修改它们。
反过来讲,当通过[]来⽅式对象的属性时,属性名通过字符串表⽰。字符串是js的数据类型,再程序运⾏时可以修改和创建它们。
*/
let readline = require('readline');
let rl = ateInterface({
input:process.stdin,
output:process.stdout
})
<('line',function(input){
let result = im());
// console.log(result);
return result;
})
function deal(input){
let object = {};
let reg =  /[a-zA-z]+/;  //英⽂字母的正则表达式,题⽬要求最先出现三次的英⽂字母
for(let i=0;i<input.length;i++){
//如果是英⽂字母,则进⾏下⼀步
st(input[i])){
if(!object[input[i]]){
//如果不存在字符
object[input[i]] = 1;
}
else{
object[input[i]]++;
}
//如果字符数量超过三个
if(object[input[i]] == 3){
console.log(input[i])//输出这个字符
return input[i]
}
}
}
}
下厨房
提交链接:
题⽬描述
⽜⽜想尝试⼀些新的料理,每个料理需要⼀些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输⼊描述:
每个输⼊包含 1 个测试⽤例。每个测试⽤例的第 i ⾏,表⽰完成第 i 件料理需要哪些材料,各个材料⽤空格隔开,输⼊只包含⼤写英⽂字母和空格,输⼊⽂件不超过 50⾏,每⼀⾏不超过 50 个字符。
输出描述:
输出⼀⾏⼀个数字表⽰完成所有料理需要多少种不同的材料。
⽰例1
输⼊
BUTTER FLOUR
HONEY FLOUR EGG
输出
4
/*
* 解题思路:
1.因为题⽬没有要求输⼊多少组数据,所以不能擅⾃要求⽤户输⼊多少组数据
2.总共料理数量:i.length,但同样的料理只算⼀种材料.可以创建⼀个新的数组,放⼊新材料,通过indexOf判断是否已经添加
*/
let readline = require('readline');
let rl = ateInterface({
input:process.stdin,
output:process.stdout
})
let iArr = [];
<('line',function(input){
if(input === 'end'){
//需要⽤户输⼊end判断是否输⼊完成
rl.close();
}
iArr.im());
})
<('close',function(){
let result = 0;
result = deal(iArr);
console.log(result);
return result;
})
function deal(iArr){
let allArr = [];
for(let i=0;i<iArr.length;i++){
iArr[i].split(' ').map(item => {
if(allArr.indexOf(item) == -1){  //检查是否已经添加过
allArr.push(item)
}
});
}
// console.log(allArr);
return allArr.length;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。