今天下午5点在北京到第二次面试,只有一道笔试题。
判断一个集合中到5个数是不是顺子,0到13到随机数。(我是觉得这个0到13可以不给我说,只要不是infinity), 0是王,可以表示任何数。
分享下,同时也是我的面试成长之路。拿到题有点懵,对算法也不懂,不是数学专业也没上过大学。想了两分钟后我动笔了。
最终没有过,老板和技术一起面的,从进去填表到笔试到面试20分钟,老板问了我的经验和学历......(其它的你们应该都知道了)直接没了,没有问我一个技术问题。// 除了算法题到想法, 很失败的一次面试,我不喜欢这个老板。
// 代码直接贴了,下面有写思路。
function straight(arr) {
// *** copy = arr;
let index = copy.indexOf(0);
if(index !== -1) {
copy.splice(index, 1);
let max = Math.max.apply(null, copy);
let min = Math.min.apply(null, copy);
if(max - min < 3 || max - min > 4) {
return false;
}
}else{
let max = Math.max.apply(null, copy);
let min = Math.min.apply(null, copy);
if(max - min === 4) {
return true;
}else{
return false;
}
}
return true;
}
我的思路是:
1. 里面有没有0,
2. 找到最大和最小,相减,没0全等于4就true,有0的话小于3或者大于4就false // 笔试时写错了,大于5,哭~~
上面是笔试所写,有bug,没有判断重复数字;
所以函数最开始判断是否有重复数字,方法很多,这里我用了Set。
// 注释处缺失代码.
let copy = [...new Set(arr)];
if(copy.length !== 5) {
return false;
}
// final.