今天下午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.