從零開始刷 LeetCode - 數組簡單題常見技巧

最近在準備找工做,刷了 LeetCode 一百多題,還在入門階段。在學習新的解題技巧的同時,準備寫一個系列總結概括本身碰到過的刷題套路和思考,做爲對本身學習過程的記錄。前端

因爲本身主要找前端開發,而且對 JS 比較熟悉,刷題語言採用 JS。git

目前筆記結構還比較混亂,會隨着刷題進程不斷完善。github

全系列文章也可訪問這裏數組

Arrays 數組

常須要遍歷。下述方法也多適用於須要遍歷的字符串有關問題。學習

for 循環

每循環一層時間複雜度便增長一個量級。 技巧:使用Hashmap,查找時間複雜度爲 O(1),佔用 O(n) 空間ui

例: (Two Sum) [leetcode.com/problems/tw…]spa

var twoSum = function (nums, target) {
  let record = new Map();

  for (const [index, num] of nums.entries()) {
    let compliment = target - num;

    // if found the pair
    if (record.has(compliment)) { // 若是找到了 compliment (說明以前存過),則返回兩個座標
      return [record.get(compliment), index];
    }
    record.set(num, index); // 若是沒找到,則記錄當前數的位置,以便以後查找
  }

};
複製代碼

雙指針

使用兩個指針對數組進行遍歷。 時間複雜度爲 O(n)。 一般須要一個判斷條件來決定如何移動指針。指針

常見條件:code

  • 升序排序數組,可根據目標值與當前值大小決定,小於目標值則左指針右移,反之則右指針左移。
  • 可能對目標值的影響

使用場景排序

  • 迴文字符子串
  • 找一對數,尤爲數組排好序後
    • 若是是找更多的數能夠拆解成一個數加一對數
    • 若數組未排序,在不損失時間複雜度的狀況下也能夠考慮將數組排序
相關文章
相關標籤/搜索