1、前言
1. 校招筆試立刻開始,整理一些算法題一塊兒學習.
2. 我統一使用Javscript(V8/Node)解答,都已經調試經過.
3. 一塊兒加油!一塊兒進步!
2、題目
- 字符串拼接
提交連接:字符串拼接
題目:
不借用任何字符串庫函數實現無冗餘地接受兩個字符串,而後把它們無冗餘的鏈接起來。
輸入描述:
每一行包括兩個字符串,長度不超過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;
}
})
- 查找重複元素
提交連接:查找重複元素
題目:
找出數組 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]);
請實現一個函數,將一個字符串中的每一個空格替換成「%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;
})
- 求最大值和最小值
提交連接:求最大值和最小值
題目:
輸入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
}
}
})
- 統計字符
提交連接:統計字符
題目描述:
給定一個英文字符串,請寫一段代碼找出這個字符串中首先出現三次的那個英文字符(須要區分大小寫)。
輸入描述:
輸入數據一個字符串,包括字母,數字等。
輸出描述:
輸出首先出現三次的那個英文字符
示例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]
}
}
}
}
- 下廚房
提交連接:下廚房
題目描述
牛牛想嘗試一些新的料理,每一個料理須要一些不一樣的材料,問完成全部的料理須要準備多少種不一樣的材料。
輸入描述:
每一個輸入包含 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;
}