javascript-leetcode icon indicating copy to clipboard operation
javascript-leetcode copied to clipboard

LeetCode 题解仓库🍖

Results 95 javascript-leetcode issues
Sort by recently updated
recently updated
newest added

[原题链接](https://leetcode-cn.com/problems/search-insert-position/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-4hu6/) ## 二分查找 先来看下有序数组的二分查找。 ```js const search = function(nums, target) { let start = 0 let end = nums.length - 1 while (start > 1) if (nums[mid] === target) return...

简单

[原题链接](https://leetcode-cn.com/problems/search-in-rotated-sorted-array/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-6dig/) ## 二分查找 先来看下有序数组的二分查找。 ```js const search = function(nums, target) { let start = 0 let end = nums.length - 1 while (start > 1) if (nums[mid] === target) return...

中等

[原题链接](https://leetcode-cn.com/problems/intersection-of-two-arrays/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-nnm9/) ## 借用 Map 1. 先明确题意,题目让我们求交集,也就是两个数组共有的元素 2. 借用 Map,遍历 nums1,将 nums1 中的元素作为 key,value 都设置为 true 填充 Map 3. 遍历 nums2,如果在 map 中出现过,也就是说在 nums1 中出现过,就是他们共有的元素,push 进 res,从 map 中删除。 4. 最后返回...

简单

[原题链接](https://leetcode-cn.com/problems/remove-element/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-tfna/) ## 双指针 先明确题意,题目要求我们原地操作。 1. 借助 left、right 双指针,从起点出发,right 指针指向当前元素,left 指针指向将要赋值的位置 2. 如果右指针指向的元素不等于 val,将右指针指向的元素赋值到左指针的位置,左右指针同时前进一步 3. 如果右指针指向的元素等于 val,那么它不能在最终的输出数组里,左指针不动,右指针前进一步 4. 输出 left 即为数组的长度 在极端情况下,nums 数组中没有元素等于 val,那么左右指针各遍历了一次数组。 ```js const removeElement = function(nums, val) {...

简单

[原题链接](https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-70s2/) ## 递归 1. “递” 阶段先走至链表末尾 2. `head === null` 为递归终止条件 3. “归” 阶段依次将每个节点上的值加入列表,即可实现链表值的倒序输出 ```js const reversePrint = function(head) { return head === null ? [] : reversePrint(head.next).concat(head.val) } ```...

简单

[原题链接](https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-vqds/) ## 双指针 1. 在头节点分别定义快、慢两个指针,在定义 n 计数器 2. 快指针先行,直到与慢指针相差 k 时,慢指针也开始走 3. 这样的话,当快指针遍历完成时,慢指针就刚好在倒数第 k 个值的位置了 ```js const kthToLast = function (head, k) { let fast = head let low =...

简单

[原题链接](https://leetcode-cn.com/problems/number-of-islands/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-j8mb/) ## 深度优先遍历 先明确,题意要求我们找到矩阵中的岛屿数量,上下左右相连接的 '1' 是连续的 1 座岛屿。 1. 从起点 (i, j) 的上下左右四个方向进行深度搜索。 2. 搜索过程中,将搜索过的岛屿标记为 '0'。 3. 遍历整个矩阵,当 `grid[i][j] === '1'` 时,进行搜索并且将岛屿数加 1。 4. 注意递归终止条件 ```js const numIslands = function(grid)...

中等

[原题链接](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-05gt/) 1.将 curr 指针指向链表头节点 2.遍历链表,注意边界条件 3.如果当前节点与它后面的节点值相等,则删除它后面与它重复的节点 4.不重复则继续遍历,最后返回头节点 ```javascript const deleteDuplicates = function(head) { let curr = head while (curr !== null && curr.next !== null) { if (curr.val === curr.next.val)...

简单

[原题链接](https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-ti15/) ## 递归 1.通过 k 来确定翻转链表的范围,进行翻转并返回翻转后的头节点。 2.记得处理边界条件,不要陷入人肉递归。 3.递归链接后续 k 个翻转的链表头节点,将上一轮翻转后的尾节点指向下一轮翻转后的头节点。 ```javascript const reverseKGroup = function(head, k) { if (head === null) { return null } let start = head let...

困难

[原题链接](https://leetcode-cn.com/problems/two-sum/solution/qian-duan-shi-tang-ti-jie-chao-hao-li-ji-vrl3/) ## 1.暴力法 符合第一直觉的暴力法,潜意识里要学会将`两数之和`转换为`两数之差`。 然后问题就变得像切菜一样简单了,双层循环找出当前数组中符合条件的两个元素,并将它们的索引下标组合成数组返回即所求。 ```js const twoSum = function(nums, target) { for (let i = 0; i < nums.length; i++) { for (let j = i + 1; j...

简单