首先针对简历中的项目进行询问,了解完之后就开始考查算法题目了。
1. js 实现字符串去重
给定一个长度小于 50 且包含字母,数字和特殊字符的字符串,提取其中的数字和字母并且把数字去重,最后输出时数字在前面,字母放在后面,且维持在其原字符串中的位置。
# in: "14-4a635a*&Kco"
# out: "144635aaKco"
def solution(s):
st = set()
number = []
string = []
for i in s:
if ord('0') <= ord(i) <= ord('9'):
if i not in st:
number.append(str(i))
st.add(i)
elif ord('a') <= ord(i) <= ord('z') or ord('A') <= ord(i) <= ord('Z'):
string.append(i)
return ''.join(number) + ''.join(string)
print(solution("14-4a635a*&Kco"))2. js 深度优先实现一个深拷贝
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj == null) {
// obj 是 null 或者不是对象和数组,直接返回
return obj;
}
let res;
if (obj instanceof Array) {
res = [];
} else {
res = {};
}
for (let key in obj) {
// 判断自身中是否包含自身属性
if (obj.hasOwnProperty(key)) {
res[key] = deepClone(obj[key])
}
}
return res;
}基础知识
笔试环节
1. 约瑟夫环问题(用 js 实现)
有一个数组 a[N] 顺序存放 0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
输入描述:
每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。
输出描述:
一行输出最后一个被删掉的数的原始下标位置。
输入例子:
8
输出例子:
6
2. js 实现翻转字符串
输入
输出
两道算法题答的都不理想,原因在于平时大部分算法题都使用 python 写的,js 语法都没掌握全,比如 js 中求字符串的 ASCII 码的方法忘记了😂
面试官前面基础知识问得很全面,问题切换的很快,通过这次面试还是看得出来基础知识掌握得不太扎实,广度和深度都有待加强。