jas0nhuang

[筆記] [ALG101] 與 [CS101] unit 7 雜記

快速記下一些重看 [ALG101] 的小細節

[ALG101] 雜記

log 小技巧

let arr = [2, 7, 5]
console.log(JSON.stringify(arr)) // '[2, 7, 5]',將 arr 轉換為字串印出,避免在 dev tool 裡的輸出被後面的變動影響
arr.push(3)
console.log(arr) // [2, 7, 5, 3]

fizz Buzz 解法研究

LeetCode - Fizz Buzz

大小寫轉換

有三種解法:

  1. ASCII code
  2. 比較字典序。例:z > b,k > g……
  3. 內建 .toUpperCase().toLowerCase()

幾個水桶

翻成數學問題就是:將一個 10 進位的數字轉換為 2 進位,並輸出此二進位數字包含幾個 1
有上過課馬上就能聯想到這個解法,我第一次解的時候是用題目給的上限值開始往下取,先找到最大的 2 的 x 次方數,減去後再繼續往下取。

大數字如何處理

如何處理超過 MAX_SAFE_INTEGER 的數字?MDN 就有說了:

For larger integers, consider using BigInt.

印出金字塔/印出聖誕樹

還是花了快一個小時才解出來,放到 LIOJ 上還是 AC,但是寫出來的 Code 比第一次在 LIOJ 上面解出來的還要噁心……

印出平方數

兩種解法:

  1. 檢查每一個數字被開根號後是否為整數。
  2. 從 1 開始計算每個數的平方,一直到大於所求範圍結束。

[CS101] 火球術 unit 7 雜記

排序法

VISUALGO

select

遍歷陣列,找到最小與第一位交換,再找第二小與第二位交換、第三小與第三位交換……類推

bubble

兩兩比較,較大放右邊,較小放左邊

insertion

將前兩位先按順序放好,第三位起與前面數字比大小,大於第二位則放至第三位,大於第一位、小於第二位則放至第二位,小於第一位則放至第一位。第四位與前面數字比大小,大於第三位則放至第四位,大於第二位小於第三位則放至第三位……類推

merge

切半、切半、再切半!合併、合併、再合併!

quick

先將第一個數字設定為基準點(piviot),尋找比它小的數字,第一個找到的調換到它旁邊,第二個找到的調換到第一個的旁邊……類推。一直到找不到比較小的數字後,將第一個數字與最後一個找到的數字對調。
持續進行這個動作,直到每個數字歸位。

用文字敘述實在很不容易想像,還是上 VISUALGO 看動畫吧!