最近在準備找工做,刷了 LeetCode 一百多題,還在入門階段。在學習新的解題技巧的同時,準備寫一個系列總結概括本身碰到過的刷題套路和思考,做爲對本身學習過程的記錄。前端
因爲本身主要找前端開發,而且對 JS 比較熟悉,刷題語言採用 JS。git
目前筆記結構還比較混亂,會隨着刷題進程不斷完善。github
全系列文章也可訪問這裏數組
常須要遍歷。下述方法也多適用於須要遍歷的字符串有關問題。學習
每循環一層時間複雜度便增長一個量級。 技巧:使用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
使用場景排序