一、前言
1. 校招笔试马上开始,整理一些算法题一起学习.
2. 我统一使用Javscript(V8/Node)解答,都已经调试通过.
3. 一起加油!一起进步!
二、题目
- 字符串拼接
提交链接:字符串拼接
题目:
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
输入描述:
每一行包括两个字符串,长度不超过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(' ');
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);
if(jugleArr.indexOf(arr[i]) != -1 && optArr.indexOf(arr[i]) == -1){
optArr.push(arr[i]);
}
}
console.log(optArr);
return optArr;
}
duplicates([1,2,4,4,3,3,1,5,3]);
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.
则经过替换之后的字符串为We%20Are%20Happy
let readline = require('readline');
let rl = readline.createInterface({
input:process.stdin,
output:process.stdout
})
rl.on('line',function(input){
let result = input.trim().replace(/ /g,'%20');
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
let readline = require('readline');
let rl = readline.createInterface({
input:process.stdin,
output:process.stdout,
})
let num = 0;
rl.on('line',function(input){
if(num == 0){
num = input.trim();
}
else{
let iptArr = input.split(' ')
if(iptArr.length == num){
let maxNum = Math.max.apply(null,iptArr)
let minNum = Math.min.apply(null,iptArr)
let result = maxNum + ' ' + minNum;
console.log(result);
return result
}
}
})
- 统计字符
提交链接:统计字符
题目描述:
给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。
输入描述:
输入数据一个字符串,包括字母,数字等。
输出描述:
输出首先出现三次的那个英文字符
示例1
输入
Have you ever gone shopping and
输出
e
let readline = require('readline');
let rl = readline.createInterface({
input:process.stdin,
output:process.stdout
})
rl.on('line',function(input){
let result = deal(input.trim());
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]
}
}
}
}
- 下厨房
提交链接:下厨房
题目描述
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输入描述:
每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
输出描述:
输出一行一个数字表示完成所有料理需要多少种不同的材料。
示例1
输入
BUTTER FLOUR
HONEY FLOUR EGG
输出
4
let readline = require('readline');
let rl = readline.createInterface({
input:process.stdin,
output:process.stdout
})
let iArr = [];
rl.on('line',function(input){
if(input === '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)
}
});
}
return allArr.length;
}