JS刷題總結

作者:汕大小吳

鏈接:nowcoder.com/discuss/72

來源:牛客網

多總結,才能更好地進步,分享下最近的刷題總結給大家,希望對於大家的學習和求職有所幫助。

關於縮減代碼

1.善用js中的函數或者特性

(迭代、解構、set等等)

2.善用位運算

(相信我,能用位運算的就用位運算)

3.善用正則表達式

(只要關於字元串的題目都應該聯想到用正則表達式)

要會寫正則,可以用正則表達式的幾個函數也要掌握

正則中:exec,test

字元串中:search,match,replace,split

具體例子可以看我的:百詞斬題解第一題經驗

4.少寫函數

刷題不是寫業務代碼,沒有說要封裝重用,AC才是王道。

並且寫函數還要思考需要哪些參數,參數如何傳遞,會影響思考速度。

我們盡量做到的是,思考清楚後直接敲,越快越好,而不是一遍敲一邊思考。

5.遞歸函數

前面情況有例外,比如要寫遞歸,就要寫函數。遞歸函數可以減少代碼。

不過還是建議用遞歸思想去想,用循環搭配數據結構(棧/隊列)去解答

關於刷題方法

1.審題先判斷陷阱

看到題目第一先看是否有時間複雜度、空間複雜度的要求。(比如大數問題、遞歸多了棧溢出等問題)

根據自己猜測判斷使用簡單方法,還是複雜方法來做,畢竟我們沒有時間去做兩遍題目。

然後再順便看下是否需要判斷邊界條件(一般都需要出錯判斷)

有時間複雜度要求的,可以優化排序、動態規劃、以空間換時間等

有空間複雜度要求的,可以用循環代替遞歸、動態規劃代替遞歸等

這裡講下為什麼不說貪心,第一理論上所有貪心可以解決的問題都可以用動態規劃來做,第二正因如此,許多公司難題也就只考到了動態規劃。

所以請一定一定要掌握動態規劃。

2.聯想

我們遇到題目時要把題目和以前做過的題聯想下,通過類似點,找出突破點。

  1. 字元串問題====》正則
  2. 鏈表、數組問題====》雙指針
  3. 數組問題====》利用數組下標來做====》有時需要額外數組
  4. 多維數組問題====》降維來做。
  5. 複雜問題、優化問題====》動態規劃
  6. 排列問題====》遞歸、回溯
  7. 數論問題====》找規律、動態規劃
  8. 樹的問題====》遞歸、深度遍歷、廣度遍歷====》棧、隊列
  9. 次數問題====》哈希表存儲(js中建議使用{},而不要使用ES6中的Map)
  10. 大小值問題====》棧、隊列、哈希表做存儲
  11. 從前往後、從大到小比較複雜====》從後往前、從小到大思考。
  12. 動態規劃重點了解
  13. 位運算也了解一下

3.必須掌握的演算法

快排和歸併排序、深度和廣度遍歷、二分查找、(能手撕)

動態規劃、回溯法。

你可以根據題目分類著重去刷這些演算法。

4.多畫圖

對於涉及數據結構的題目,如鏈表、二叉樹等一定要畫圖。

對於涉及概率的問題,可以畫圈圈來交、並、補。

對於點線的問題,可以畫坐標系。

5.多舉例

對於複雜問題可以舉不複雜的小例子來分析步驟。

對於數論問題可以舉例子來找規律。

退一萬步來說,假設你實在不會做,你也可以通過舉例,自己if-else生產很多測試用例去滿足題意。

曾經一個print()就AC50%了,再來一個也許就100%了。

6.剩下的能淘汰你的只有智力題了。

(逃)

有些忘記了,暫時想到的先寫這麼多了,慢慢補充,有什麼好的建議或者技巧都可以發給我,虛心接受。

更多筆經面經nowcoder.com/discuss?


推薦閱讀:

Portfolio Critique #8 - Facebook by Sunny
一周內搞定你的新工作:如何做到高達90%的面試成功率?
求職者如何避免倉促跳槽?
想在年後的求職中更有競爭力,這個寒假應該該準備些什麼?
你是如何發現自己的喜好的?

TAG:前端開發 | 面試 | 求職 |