一道演算法題

他們說我帥發表於2018-03-15

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

沒了,有更好的方法的話。請大佬評論,謝謝。// 我是不懂演算法的菜雞,只知道按自己的想法寫函式。

最後一句,有招初級前端的請給內推,給個面試的機會。謝謝!

相關文章