diff --git a/problems/0001.两数之和.md b/problems/0001.两数之和.md index 21f798a9..c1759c8c 100644 --- a/problems/0001.两数之和.md +++ b/problems/0001.两数之和.md @@ -37,9 +37,9 @@ https://leetcode-cn.com/problems/two-sum/ 本题呢,则要使用map,那么来看一下使用数组和set来做哈希法的局限。 * 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。 -* set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下表位置,因为要返回x 和 y的下表。所以set 也不能用。 +* set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。 -此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下表。 +此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下标。 C++中map,有三种类型: @@ -156,6 +156,21 @@ impl Solution { } ``` +Javascript + +```javascript +var twoSum = function (nums, target) { + let hash = {}; + for (let i = 0; i < nums.length; i++) { + if (hash[target - nums[i]] !== undefined) { + return [i, hash[target - nums[i]]]; + } + hash[nums[i]] = i; + } + return []; +}; +``` + diff --git a/problems/0020.有效的括号.md b/problems/0020.有效的括号.md index 98cc7cd8..6c630f39 100644 --- a/problems/0020.有效的括号.md +++ b/problems/0020.有效的括号.md @@ -247,6 +247,32 @@ def is_valid(strs) end ``` +Javascript: +```javascript +var isValid = function (s) { + const stack = []; + for (let i = 0; i < s.length; i++) { + let c = s[i]; + switch (c) { + case '(': + stack.push(')'); + break; + case '[': + stack.push(']'); + break; + case '{': + stack.push('}'); + break; + default: + if (c !== stack.pop()) { + return false; + } + } + } + return stack.length === 0; +}; +``` + ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) diff --git a/problems/0024.两两交换链表中的节点.md b/problems/0024.两两交换链表中的节点.md index 132d65bb..bda64da6 100644 --- a/problems/0024.两两交换链表中的节点.md +++ b/problems/0024.两两交换链表中的节点.md @@ -132,6 +132,21 @@ Python: Go: +Javascript: +```javascript +var swapPairs = function (head) { + let ret = new ListNode(0, head), temp = ret; + while (temp.next && temp.next.next) { + let cur = temp.next.next, pre = temp.next; + pre.next = cur.next; + cur.next = pre; + temp.next = cur; + temp = pre; + } + return ret.next; +}; +``` + ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md index 0ab67b13..1cb4164f 100644 --- a/problems/0102.二叉树的层序遍历.md +++ b/problems/0102.二叉树的层序遍历.md @@ -687,6 +687,26 @@ func levelOrder(root *TreeNode) [][]int { return result } ``` +Javascript: +```javascript +var levelOrder = function (root) { + let ans = []; + if (!root) return ans; + let queue = [root]; + while (queue.length) { + let size = queue.length; + let temp = []; + while (size--) { + let n = queue.shift(); + temp.push(n.val); + if (n.left) queue.push(n.left); + if (n.right) queue.push(n.right); + } + ans.push(temp); + } + return ans; +}; +``` ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) diff --git a/problems/0239.滑动窗口最大值.md b/problems/0239.滑动窗口最大值.md index 781bfa6f..7d0a145f 100644 --- a/problems/0239.滑动窗口最大值.md +++ b/problems/0239.滑动窗口最大值.md @@ -267,7 +267,30 @@ Python: Go: - +Javascript: +```javascript +var maxSlidingWindow = function (nums, k) { + // 队列数组(存放的是元素下标,为了取值方便) + const q = []; + // 结果数组 + const ans = []; + for (let i = 0; i < nums.length; i++) { + // 若队列不为空,且当前元素大于等于队尾所存下标的元素,则弹出队尾 + while (q.length && nums[i] >= nums[q[q.length - 1]]) { + q.pop(); + } + // 入队当前元素下标 + q.push(i); + // 判断当前最大值(即队首元素)是否在窗口中,若不在便将其出队 + while (q[0] <= i - k) { + q.shift(); + } + // 当达到窗口大小时便开始向结果中添加数据 + if (i >= k - 1) ans.push(nums[q[0]]); + } + return ans; +}; +``` -----------------------