前端笔试算法题,提高笔试存活率!(持续更新)
2018-08-05 16:23
405 查看
一、前言
1. 校招笔试马上开始,整理一些算法题一起学习. 2. 我统一使用Javscript(V8/Node)解答,都已经调试通过. 3. 一起加油!一起进步!
二、题目
字符串拼接提交链接:[点击这里](https://www.nowcoder.com/questionTerminal/40d83e5509b04d20825ae68fe35e9ca8) 题目:不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。 输入描述: 每一行包括两个字符串,长度不超过100。 输出描述: 可能有多组测试数据,对于每组数据, 示例1 输入 abc def 输出 abcdef
/* *解题思路:这道题目比较简单,只需要把字符串分割成数组去掉空格后,再拼接在一起转换成字符串即可 */ let readline = require('readline'); let rl = readline.createInterface({ input:process.stdin, //输入流 output:process.stdout }) let str = ''; rl.on('line',function(input){ let strArr = input.trim().split(' '); //trim()清空前后的空格. //split(' '),从字符串的空格切分成数组 'abc def'变成['abc','def'] if(strArr.length == 2){ str = strArr[0] + strArr[1]; console.log(str); return str; } })
查找重复元素
提交链接:[点击这里](https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b) 题目:找出数组 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]); } } console.log(optArr); //[1,4,3] return optArr; } duplicates([1,2,4,4,3,3,1,5,3]);
替换空格
提交链接:[点击这里](https://www.nowcoder.com/profile/1633362/codeBookDetail?submissionId=30299321) 请实现一个函数,将一个字符串中的每个空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
/* *解题思路:利用简单的正则获取空格,并且替换成%20即可。 部分正则规则:/g 匹配所有符合条件的元素. \d:表示数字 ^:表示开头 $:表示结尾 +:匹配多个 例如: ^\d+$ 匹配的字符串只能是数字 */ let readline = require('readline'); let rl = readline.createInterface({ input:process.stdin, output:process.stdout }) rl.on('line',function(input){ // let result = deal(input); let result = input.trim().replace(/ /g,'%20'); //replace(获取值,替换值) console.log(result); return result; })
求最大值和最小值
提交链接:[点击这里](https://www.nowcoder.com/questionTerminal/82e5ff335eeb486aab359767895cc7b4) 题目: 输入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 = readline.createInterface({ input:process.stdin, output:process.stdout, }) let num = 0; rl.on('line',function(input){ //初始值是整数长度.赋值给num if(num == 0){ num = input.trim();//去除前后的空格 } 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 } } })
统计字符
提交链接:[点击这里](https://www.nowcoder.com/questionTerminal/e3f67da21c3f45bfb091cf0cabb9bb0f) 题目描述: 给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。 输入描述: 输入数据一个字符串,包括字母,数字等。 输出描述: 输出首先出现三次的那个英文字符 示例1 输入 Have you ever gone shopping and 输出 e
/* * 解题思路:可以利用对象的属性添加新字符,值则是这个字符的出现的次数. * 对象添加属性(key): 对象[属性名]:value * * 扩展:对象属性 通过点(.) 和方括号([]) 的不同之处: * 通过点运算符(.)方法对象属性时,属性名用一个标识符来表示。标识符必须直接出现再js程序中,它们不是数据类型,因此程序无法修改它们。 反过来讲,当通过[]来方式对象的属性时,属性名通过字符串表示。字符串是js的数据类型,再程序运行时可以修改和创建它们。 */ let readline = require('readline'); let rl = readline.createInterface({ input:process.stdin, output:process.stdout }) rl.on('line',function(input){ let result = deal(input.trim()); // console.log(result); return result; }) function deal(input){ let object = {}; let reg = /[a-zA-z]+/; //英文字母的正则表达式,题目要求最先出现三次的英文字母 for(let i=0;i<input.length;i++){ //如果是英文字母,则进行下一步 if(reg.test(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] } } } }
下厨房
提交链接:[点击这里](https://www.nowcoder.com/questionTerminal/ca5c9ba9ebac4fd5ae9ba46114b0f476) 题目描述 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。 输入描述: 每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。 输出描述: 输出一行一个数字表示完成所有料理需要多少种不同的材料。 示例1 输入 BUTTER FLOUR HONEY FLOUR EGG 输出 4
/* * 解题思路: 1.因为题目没有要求输入多少组数据,所以不能擅自要求用户输入多少组数据 2.总共料理数量:i.length,但同样的料理只算一种材料.可以创建一个新的数组,放入新材料,通过indexOf判断是否已经添加 */ let readline = require('readline'); let rl = readline.createInterface({ input:process.stdin, output:process.stdout }) let iArr = []; rl.on('line',function(input){ if(input === 'end'){ //需要用户输入end判断是否输入完成 rl.close(); } iArr.push(input.trim()); }) rl.on('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; }
相关文章推荐
- 前端笔试题总结---持续更新
- 前端笔试题及资料集锦(一)(持续更新....)
- 前端笔试,前端面试——各种小姿势(持续更新,欢迎补充!)
- 收集一些关于前端的网站(持续更新)
- 校招笔试题知识点汇总(持续更新)
- 正在维护和制作的一个gis系统的前端applet的简要开发日志(持续更新)
- 前端知识点(持续更新)
- Java面试题系列--经典算法题(持续更新)
- hadoop常见算法(持续更新)
- STL的算法中,一些很简练的算法——持续更新
- 前端常用网站收藏(持续更新中。。。)
- 学习算法的计划(持续更新)
- 作为前端,个人整理的一些网站链接(持续更新中)
- 个人整理前端的一些方法-持续更新
- PHP笔试(持续更新...)
- 算法复习(持续更新)
- 前端(html,css,js)各种摘抄整理(持续更新ing)
- 牛客网--前端面试经典题目合集总结(持续更新)
- 2014各大网络公司校招笔试算法题(收集并更新中)
- 项目开发总结:前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)