2021年7月8日 星期四

leetCode Missing Number

 最近因為面試解了不少前測,爬文章的時候看到這題有蠻多想法的, leetCode 會計算花費的運算時間覺得有趣,就研究了一下。

題目是 0~N 的整數陣列,中間缺了哪一個數?

一開始想到用排好再計算差值的方法

 const array = [301];
 const missnumber = nums => {
        array
          .sort((a, b) => a - b)
          .map((item, index) => item - array[index - 1])
          .find(item => item > 1);
        return missnumber;
      };
missnumber(array)

覺得有點多行,感覺應該有什麼很酷的方法不用反覆對陣列操作,就找了一下,發現可以用XOR 運算。

原理是 a ^ b ^ c ^ a ^ b = a ^ a ^ b ^ b ^ c = 0 ^ 0 ^ c = c

 const array = [301];
 const missNumber = nums => {
        const nArray = [];
        for (let i = 0; i < nums.length + 1; i++) {
          nArray.push(i);
        }
        const mathArray = nums.concat(nArray);
        const outputNumber = mathArray.reduce((total, e) => total ^ e);
        return outputNumber;
      };
 missNumber(array);

於是改了一種寫法,就程式的行數而言下面比較長,效能而言由於我家網路莫名其妙,兩者互有快慢比不出來,未來要仔細研究一下時間複雜度的計算。

參考資料:https://www.ruanyifeng.com/blog/2021/01/_xor.html










沒有留言:

張貼留言