常见 leetcode 模式
// two pointers - in-place array modificationconst modifyarray = (arr) => { let writepointer = 0; for (let readpointer = 0; readpointer { let slow = head, fast = head; while (fast && fast.next) { slow = slow.next; fast = fast.next.next; if (slow === fast) return true; } return false;};// sliding window - fixed sizeconst fixedslidingwindow = (arr, k) => { let sum = 0; // initialize first window for (let i = 0; i < k; i++) { sum += arr[i]; } let maxsum = sum; // slide window for (let i = k; i { let start = 0, sum = 0, minlen = infinity; for (let end = 0; end = target) { minlen = math.min(minlen, end - start + 1); sum -= arr[start]; start++; } } return minlen === infinity ? 0 : minlen;};// bfs - level order traversalconst levelorder = (root) => { if (!root) return []; const result = []; const queue = [root]; while (queue.length) { const levelsize = queue.length; const currentlevel = []; for (let i = 0; i { const result = []; const traverse = (node) => { if (!node) return; // pre-order result.push(node.val); traverse(node.left); // in-order would be here traverse(node.right); // post-order would be here }; traverse(root); return result;};// backtracking templateconst backtrack = (nums) => { const result = []; const bt = (path, choices) => { if (/* ending condition */) { result.push([...path]); return; } for (let i = 0; i { const dp = new array(n + 1).fill(0); dp[0] = 1; // base case for (let i = 1; i <= n; i++) { for (let j = 0; j { const memo = new map(); const dp = (n) => { if (n <= 1) return 1; if (memo.has(n)) return memo.get(n); let result = 0; for (let i = 0; i { const stack = []; // [index, value] const result = new array(arr.length).fill(-1); for (let i = 0; i arr[i]) { const [previndex, _] = stack.pop(); result[previndex] = i - previndex; } stack.push([i, arr[i]]); } return result;};// prefix sumconst prefixsum = (arr) => { const prefix = [0]; for (let i = 0; i { let left = 0, right = arr.length; while (left < right) { const mid = math.floor((left + right) / 2); if (arr[mid] { let left = 0, right = arr.length; while (left < right) { const mid = math.floor((left + right) / 2); if (arr[mid] i); this.rank = new array(n).fill(0); } find(x) { if (this.parent[x] !== x) { this.parent[x] = this.find(this.parent[x]); // path compression } return this.parent[x]; } union(x, y) { let rootx = this.find(x); let rooty = this.find(y); if (rootx !== rooty) { if (this.rank[rootx] < this.rank[rooty]) { [rootx, rooty] = [rooty, rootx]; } this.parent[rooty] = rootx; if (this.rank[rootx] === this.rank[rooty]) { this.rank[rootx]++; } } }}
登录后复制
常见的时间/空间复杂度模式
// O(1) - ConstantArray.push(), Array.pop(), Map.set(), Map.get()// O(log n) - LogarithmicBinary Search, Balanced BST operations// O(n) - LinearArray traversal, Linear Search// O(n log n) - LinearithmicEfficient sorting (Array.sort())// O(n²) - QuadraticNested loops, Simple sorting algorithms// O(2ⁿ) - ExponentialRecursive solutions without memoization
登录后复制
以上就是JavaScript 面试备忘单 – 第 2 部分的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2645900.html