From 4a924b62baad79a45121be27318ea04036846df4 Mon Sep 17 00:00:00 2001 From: 20200203127 <846169622@qq.com> Date: Sat, 25 Sep 2021 17:40:17 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E5=8A=A0=E5=85=A5python=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E5=8F=8C=E6=8C=87=E9=92=88=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0005.最长回文子串.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/problems/0005.最长回文子串.md b/problems/0005.最长回文子串.md index c78b827c..d9ddcc60 100644 --- a/problems/0005.最长回文子串.md +++ b/problems/0005.最长回文子串.md @@ -288,7 +288,34 @@ class Solution: return s[left:right + 1] ``` +> 双指针法: +```python +class Solution: + def longestPalindrome(self, s: str) -> str: + def find_point(i, j, s): + while i >= 0 and j < len(s) and s[i] == s[j]: + i -= 1 + j += 1 + return i + 1, j + + def compare(start, end, left, right): + if right - left > end - start: + return left, right + else: + return start, end + + start = 0 + end = 0 + for i in range(len(s)): + left, right = find_point(i, i, s) + start, end = compare(start, end, left, right) + + left, right = find_point(i, i + 1, s) + start, end = compare(start, end, left, right) + return s[start:end] + +``` ## Go ```go From a2f7147a9386ca8949cc4774c0ea6e57468119b3 Mon Sep 17 00:00:00 2001 From: Jerry-306 <82520819+Jerry-306@users.noreply.github.com> Date: Sat, 25 Sep 2021 20:08:41 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=200107=20=E4=BA=8C?= =?UTF-8?q?=E5=8F=89=E6=A0=91=E5=B1=82=E5=BA=8F=E9=81=8D=E5=8E=86II=20Java?= =?UTF-8?q?Script=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 选择从数组前头插入数值,避免最后反转数组的操作,减少计算时间 --- problems/0102.二叉树的层序遍历.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md index 5128d6ec..7c43a472 100644 --- a/problems/0102.二叉树的层序遍历.md +++ b/problems/0102.二叉树的层序遍历.md @@ -421,9 +421,10 @@ var levelOrderBottom = function(root) { node.left&&queue.push(node.left); node.right&&queue.push(node.right); } - res.push(curLevel); + // 从数组前头插入值,避免最后反转数组,减少运算时间 + res.unshift(curLevel); } - return res.reverse(); + return res; }; ``` From 44019c84ab0e583d55714472ae6f5131b77a6286 Mon Sep 17 00:00:00 2001 From: Jerry-306 <82520819+Jerry-306@users.noreply.github.com> Date: Sat, 25 Sep 2021 20:23:52 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E=200116=20=E5=A1=AB?= =?UTF-8?q?=E5=86=99=E6=AF=8F=E4=B8=80=E4=B8=AA=E8=8A=82=E7=82=B9=E5=8F=91?= =?UTF-8?q?=E4=B8=8B=E4=B8=80=E4=B8=AA=E5=8F=B3=E4=BE=A7=E6=8C=87=E9=92=88?= =?UTF-8?q?=20JavaScript=E7=89=88=E6=9C=AC=20=E8=A7=A3=E6=B3=95=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 0116 填写每一个节点发下一个右侧指针 JavaScript版本 解法代码 --- problems/0102.二叉树的层序遍历.md | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md index 5128d6ec..79d3547d 100644 --- a/problems/0102.二叉树的层序遍历.md +++ b/problems/0102.二叉树的层序遍历.md @@ -1263,7 +1263,41 @@ class Solution: first = first.left # 从本层扩展到下一层 return root ``` +JavaScript: +```javascript +/** + * // Definition for a Node. + * function Node(val, left, right, next) { + * this.val = val === undefined ? null : val; + * this.left = left === undefined ? null : left; + * this.right = right === undefined ? null : right; + * this.next = next === undefined ? null : next; + * }; + */ + +/** + * @param {Node} root + * @return {Node} + */ +var connect = function(root) { + if (root === null) return root; + let queue = [root]; + while (queue.length) { + let n = queue.length; + for (let i=0; i Date: Sat, 25 Sep 2021 20:34:22 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20117=E9=A2=98?= =?UTF-8?q?=E3=80=81104=E9=A2=98=E3=80=81111=E9=A2=98=E7=AD=89=20JavaScrip?= =?UTF-8?q?t=E7=89=88=E6=9C=AC=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 117.填充每个节点的下一个右侧节点指针II JavaScript版本解法代码 新增 104二叉树最大深度 JavaScript版本解法代码 新增 111.二叉树的最小深度 JavaScript版本解法代码 --- problems/0102.二叉树的层序遍历.md | 97 ++++++++++++++++++++++- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md index 5128d6ec..330a4f62 100644 --- a/problems/0102.二叉树的层序遍历.md +++ b/problems/0102.二叉树的层序遍历.md @@ -1426,7 +1426,39 @@ class Solution: first = dummyHead.next # 此处为换行操作,更新到下一行 return root ``` +JavaScript: +```javascript +/** + * // Definition for a Node. + * function Node(val, left, right, next) { + * this.val = val === undefined ? null : val; + * this.left = left === undefined ? null : left; + * this.right = right === undefined ? null : right; + * this.next = next === undefined ? null : next; + * }; + */ +/** + * @param {Node} root + * @return {Node} + */ +var connect = function(root) { + if (root === null) { + return null; + } + let queue = [root]; + while (queue.length > 0) { + let n = queue.length; + for (let i=0; i Date: Sun, 26 Sep 2021 09:26:26 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20100=20=E7=9B=B8?= =?UTF-8?q?=E5=90=8C=E7=9A=84=E6=A0=91=E3=80=81257=20=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=A0=91=E7=9A=84=E6=89=80=E6=9C=89=E8=B7=AF=E5=BE=84=20=20?= =?UTF-8?q?=E4=B8=A4=E9=A2=98=E7=9A=84JavaScript=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 100 相同的树、257 二叉树的所有路径 两题的JavaScript版本代码 --- problems/二叉树中递归带着回溯.md | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/problems/二叉树中递归带着回溯.md b/problems/二叉树中递归带着回溯.md index 7b0ccad7..3c17e777 100644 --- a/problems/二叉树中递归带着回溯.md +++ b/problems/二叉树中递归带着回溯.md @@ -439,9 +439,84 @@ func traversal(root *TreeNode,result *[]string,path *[]int){ } ``` +JavaScript: +100.相同的树 +```javascript +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} p + * @param {TreeNode} q + * @return {boolean} + */ +var isSameTree = function(p, q) { + if (p === null && q === null) { + return true; + } else if (p === null || q === null) { + return false; + } else if (p.val !== q.val) { + return false; + } else { + return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); + } +}; +``` +257.二叉树的不同路径 +> 回溯法: + +```javascript +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {string[]} + */ +var binaryTreePaths = function(root) { + const getPath = (root, path, result) => { + path.push(root.val); + if (root.left === null && root.right === null) { + let n = path.length; + let str = ''; + for (let i=0; i'; + } + str += path[n-1]; + result.push(str); + } + + if (root.left !== null) { + getPath(root.left, path, result); + path.pop(); // 回溯 + } + + if (root.right !== null) { + getPath(root.right, path, result); + path.pop(); + } + } + + if (root === null) return []; + let result = []; + let path = []; + getPath(root, path, result); + return result; +}; +``` ----------------------- From 051321077ffecdb3a0cfe1c18333c7cc46067e40 Mon Sep 17 00:00:00 2001 From: Jerry-306 <82520819+Jerry-306@users.noreply.github.com> Date: Sun, 26 Sep 2021 10:38:56 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E=200617.=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E4=BA=8C=E5=8F=89=E6=A0=91=20=20=20JavaScript=20?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E6=B3=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0617.合并二叉树.md | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/problems/0617.合并二叉树.md b/problems/0617.合并二叉树.md index e21efcb3..80200c03 100644 --- a/problems/0617.合并二叉树.md +++ b/problems/0617.合并二叉树.md @@ -507,6 +507,8 @@ func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode { ## JavaScript +> 递归法: + ```javascript /** * Definition for a binary tree node. @@ -535,6 +537,53 @@ var mergeTrees = function (root1, root2) { return preOrder(root1, root2); }; ``` +> 迭代法: + +```javascript + +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root1 + * @param {TreeNode} root2 + * @return {TreeNode} + */ +var mergeTrees = function(root1, root2) { + if (root1 === null) return root2; + if (root2 === null) return root1; + + let queue = []; + queue.push(root1); + queue.push(root2); + while (queue.length) { + let node1 = queue.shift(); + let node2 = queue.shift();; + node1.val += node2.val; + if (node1.left !== null && node2.left !== null) { + queue.push(node1.left); + queue.push(node2.left); + } + if (node1.right !== null && node2.right !== null) { + queue.push(node1.right); + queue.push(node2.right); + } + if (node1.left === null && node2.left !== null) { + node1.left = node2.left; + } + if (node1.right === null && node2.right !== null) { + node1.right = node2.right; + } + } + return root1; +}; + +``` ----------------------- From 769e88bb110734b306b61769ba8d0f96a58d4191 Mon Sep 17 00:00:00 2001 From: Qxiaoqi Date: Sun, 26 Sep 2021 17:01:50 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200707.=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E9=93=BE=E8=A1=A8=20TypeScript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0707.设计链表.md | 115 ++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/problems/0707.设计链表.md b/problems/0707.设计链表.md index e05165a9..601161e0 100644 --- a/problems/0707.设计链表.md +++ b/problems/0707.设计链表.md @@ -880,6 +880,121 @@ MyLinkedList.prototype.deleteAtIndex = function(index) { * obj.deleteAtIndex(index) */ ``` + +TypeScript: +```TypeScript +class ListNode { + public val: number; + public next: ListNode | null; + constructor(val?: number, next?: ListNode | null) { + this.val = val === undefined ? 0 : val; + this.next = next === undefined ? null : next; + } +} + +class MyLinkedList { + // 记录链表长度 + private size: number; + private head: ListNode | null; + private tail: ListNode | null; + constructor() { + this.size = 0; + this.head = null; + this.tail = null; + } + + // 获取链表中第 index个节点的值 + get(index: number): number { + // 索引无效的情况 + if (index < 0 || index >= this.size) { + return -1; + } + let curNode = this.getNode(index); + // 这里在前置条件下,理论上不会出现 null的情况 + return curNode.val; + } + + // 在链表的第一个元素之前添加一个值为 val的节点。插入后,新节点将成为链表的第一个节点。 + addAtHead(val: number): void { + let node: ListNode = new ListNode(val, this.head); + this.head = node; + if (!this.tail) { + this.tail = node; + } + this.size++; + } + + // 将值为 val 的节点追加到链表的最后一个元素。 + addAtTail(val: number): void { + let node: ListNode = new ListNode(val, null); + if (this.tail) { + this.tail.next = node; + } else { + // 还没有尾节点,说明一个节点都还没有 + this.head = node; + } + this.tail = node; + this.size++; + } + + // 在链表中的第 index个节点之前添加值为 val的节点。 + // 如果 index等于链表的长度,则该节点将附加到链表的末尾。如果 index大于链表长度,则不会插入节点。如果 index小于0,则在头部插入节点。 + addAtIndex(index: number, val: number): void { + if (index === this.size) { + this.addAtTail(val); + return; + } + if (index > this.size) { + return; + } + // <= 0 的情况都是在头部插入 + if (index <= 0) { + this.addAtHead(val); + return; + } + // 正常情况 + // 获取插入位置的前一个 node + let curNode = this.getNode(index - 1); + let node: ListNode = new ListNode(val, curNode.next); + curNode.next = node; + this.size++; + } + + // 如果索引 index有效,则删除链表中的第 index个节点。 + deleteAtIndex(index: number): void { + if (index < 0 || index >= this.size) { + return; + } + // 处理头节点 + if (index === 0) { + this.head = this.head!.next; + this.size--; + return; + } + // 索引有效 + let curNode: ListNode = this.getNode(index - 1); + curNode.next = curNode.next!.next; + // 处理尾节点 + if (index === this.size - 1) { + this.tail = curNode; + } + this.size--; + } + + // 获取指定 Node节点 + private getNode(index: number): ListNode { + // 这里不存在没办法获取到节点的情况,都已经在前置方法做过判断 + // 创建虚拟头节点 + let curNode: ListNode = new ListNode(0, this.head); + for (let i = 0; i <= index; i++) { + // 理论上不会出现 null + curNode = curNode.next!; + } + return curNode; + } +} +``` + Kotlin: ```kotlin class MyLinkedList { From 24c515282ada19201d460a7e27ddc4979c3eb7ee Mon Sep 17 00:00:00 2001 From: yqq Date: Mon, 27 Sep 2021 16:08:33 +0800 Subject: [PATCH 08/13] =?UTF-8?q?1002.=20=E6=9F=A5=E6=89=BE=E5=B8=B8?= =?UTF-8?q?=E7=94=A8=E5=AD=97=E7=AC=A6,=20=20=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=A2=98=E7=9B=AE=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/1002.查找常用字符.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/problems/1002.查找常用字符.md b/problems/1002.查找常用字符.md index e02780da..043d20a4 100644 --- a/problems/1002.查找常用字符.md +++ b/problems/1002.查找常用字符.md @@ -12,18 +12,24 @@ [力扣题目链接](https://leetcode-cn.com/problems/find-common-characters/) -给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。 +给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。 -你可以按任意顺序返回答案。 +示例 1: -【示例一】 -输入:["bella","label","roller"] +输入:words = ["bella","label","roller"] 输出:["e","l","l"] +示例 2: -【示例二】 -输入:["cool","lock","cook"] +输入:words = ["cool","lock","cook"] 输出:["c","o"] +提示: + +1 <= words.length <= 100 +1 <= words[i].length <= 100 +words[i] 由小写英文字母组成 + + # 思路 From a35adcffbee7ff9c229cff38eff9506b396c0186 Mon Sep 17 00:00:00 2001 From: yqq Date: Mon, 27 Sep 2021 18:51:54 +0800 Subject: [PATCH 09/13] =?UTF-8?q?1035.=E4=B8=8D=E7=9B=B8=E4=BA=A4=E7=9A=84?= =?UTF-8?q?=E7=BA=BF.md,=20=E5=A2=9E=E5=8A=A0Golang=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/1035.不相交的线.md | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/problems/1035.不相交的线.md b/problems/1035.不相交的线.md index a10fd381..8795a77d 100644 --- a/problems/1035.不相交的线.md +++ b/problems/1035.不相交的线.md @@ -109,6 +109,41 @@ class Solution: return dp[-1][-1] ``` + +Golang: + +```go + +func maxUncrossedLines(A []int, B []int) int { + m, n := len(A), len(B) + dp := make([][]int, m+1) + for i := range dp { + dp[i] = make([]int, n+1) + } + + for i := 1; i <= len(A); i++ { + for j := 1; j <= len(B); j++ { + if (A[i - 1] == B[j - 1]) { + dp[i][j] = dp[i - 1][j - 1] + 1; + } else { + dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + return dp[m][n]; + +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} +``` + + + JavaScript: ```javascript From a3b5912c1aee1096e7e7cf2c2d9dfd1df0d6a5cc Mon Sep 17 00:00:00 2001 From: yqq Date: Mon, 27 Sep 2021 18:52:44 +0800 Subject: [PATCH 10/13] fix --- problems/1035.不相交的线.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/problems/1035.不相交的线.md b/problems/1035.不相交的线.md index 8795a77d..22cf613b 100644 --- a/problems/1035.不相交的线.md +++ b/problems/1035.不相交的线.md @@ -124,13 +124,13 @@ func maxUncrossedLines(A []int, B []int) int { for i := 1; i <= len(A); i++ { for j := 1; j <= len(B); j++ { if (A[i - 1] == B[j - 1]) { - dp[i][j] = dp[i - 1][j - 1] + 1; + dp[i][j] = dp[i - 1][j - 1] + 1 } else { - dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); + dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) } } } - return dp[m][n]; + return dp[m][n] } From b5a1b4663cdbb869c77d4d7269cb759cea739a2c Mon Sep 17 00:00:00 2001 From: ArthurP Date: Mon, 27 Sep 2021 19:59:46 +0100 Subject: [PATCH 11/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200491.=E9=80=92?= =?UTF-8?q?=E5=A2=9E=E5=AD=90=E5=BA=8F=E5=88=97.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0491.递增子序列.md | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/problems/0491.递增子序列.md b/problems/0491.递增子序列.md index ea113f4b..82e768e7 100644 --- a/problems/0491.递增子序列.md +++ b/problems/0491.递增子序列.md @@ -313,7 +313,63 @@ var findSubsequences = function(nums) { ``` +C: +```c +int* path; +int pathTop; +int** ans; +int ansTop; +int* length; +void copy() { + int* tempPath = (int*)malloc(sizeof(int) * pathTop); + memcpy(tempPath, path, pathTop * sizeof(int)); + length[ansTop] = pathTop; + ans[ansTop++] = tempPath; +} +int find(int* uset, int usetSize, int key) { + int i; + for(i = 0; i < usetSize; i++) { + if(uset[i] == key) + return 1; + } + return 0; +} + +void backTracking(int* nums, int numsSize, int startIndex) { + if(pathTop > 1) { + copy(); + } + int* uset = (int*)malloc(sizeof(int) * numsSize); + int usetTop = 0; + int i; + for(i = startIndex; i < numsSize; i++) { + if((pathTop > 0 && nums[i] < path[pathTop - 1]) || find(uset, usetTop, nums[i])) + continue; + uset[usetTop++] = nums[i]; + path[pathTop++] = nums[i]; + backTracking(nums, numsSize, i + 1); + pathTop--; + } +} + +int** findSubsequences(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ + path = (int*)malloc(sizeof(int) * numsSize); + ans = (int**)malloc(sizeof(int*) * 33000); + length = (int*)malloc(sizeof(int*) * 33000); + pathTop = ansTop = 0; + + backTracking(nums, numsSize, 0); + + *returnSize = ansTop; + *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); + int i; + for(i = 0; i < ansTop; i++) { + (*returnColumnSizes)[i] = length[i]; + } + return ans; +} +``` ----------------------- From d39a7287a21e3c733bc84ac32faae19748fa9424 Mon Sep 17 00:00:00 2001 From: ArthurP Date: Mon, 27 Sep 2021 20:02:02 +0100 Subject: [PATCH 12/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200491.=E9=80=92?= =?UTF-8?q?=E5=A2=9E=E5=AD=90=E5=BA=8F=E5=88=97.md=20C=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0491.递增子序列.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/problems/0491.递增子序列.md b/problems/0491.递增子序列.md index 82e768e7..9f61ae45 100644 --- a/problems/0491.递增子序列.md +++ b/problems/0491.递增子序列.md @@ -320,6 +320,7 @@ int pathTop; int** ans; int ansTop; int* length; +//将当前path中的内容复制到ans中 void copy() { int* tempPath = (int*)malloc(sizeof(int) * pathTop); memcpy(tempPath, path, pathTop * sizeof(int)); @@ -327,6 +328,7 @@ void copy() { ans[ansTop++] = tempPath; } +//查找uset中是否存在值为key的元素 int find(int* uset, int usetSize, int key) { int i; for(i = 0; i < usetSize; i++) { @@ -337,6 +339,7 @@ int find(int* uset, int usetSize, int key) { } void backTracking(int* nums, int numsSize, int startIndex) { + //当path中元素大于1个时,将path拷贝到ans中 if(pathTop > 1) { copy(); } @@ -344,16 +347,21 @@ void backTracking(int* nums, int numsSize, int startIndex) { int usetTop = 0; int i; for(i = startIndex; i < numsSize; i++) { + //若当前元素小于path中最后一位元素 || 在树的同一层找到了相同的元素,则continue if((pathTop > 0 && nums[i] < path[pathTop - 1]) || find(uset, usetTop, nums[i])) continue; + //将当前元素放入uset uset[usetTop++] = nums[i]; + //将当前元素放入path path[pathTop++] = nums[i]; backTracking(nums, numsSize, i + 1); + //回溯 pathTop--; } } int** findSubsequences(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ + //辅助数组初始化 path = (int*)malloc(sizeof(int) * numsSize); ans = (int**)malloc(sizeof(int*) * 33000); length = (int*)malloc(sizeof(int*) * 33000); @@ -361,6 +369,7 @@ int** findSubsequences(int* nums, int numsSize, int* returnSize, int** returnCol backTracking(nums, numsSize, 0); + //设置数组中返回元素个数,以及每个一维数组的长度 *returnSize = ansTop; *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); int i; From 7f75ee1b562559c9ef1c4d0d38365bf3ab57195e Mon Sep 17 00:00:00 2001 From: Luo <82520819+Jerry-306@users.noreply.github.com> Date: Tue, 28 Sep 2021 08:44:37 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=200704=20=E4=BA=8C?= =?UTF-8?q?=E5=88=86=E6=9F=A5=E6=89=BE=20JavaScript=E7=89=88=E6=9C=AC=20?= =?UTF-8?q?=E5=B7=A6=E9=97=AD=E5=8F=B3=E9=97=AD=E5=8C=BA=E9=97=B4=20?= =?UTF-8?q?=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0704.二分查找.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index 67809000..5b8ff8c7 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -288,15 +288,16 @@ func search(nums []int, target int) int { * @param {number} target * @return {number} */ +/** var search = function(nums, target) { - let left = 0, right = nums.length; - // 使用左闭右开区间 [left, right) - while (left < right) { + let left = 0, right = nums.length - 1; + // 使用左闭右闭区间 + while (left <= right) { let mid = left + Math.floor((right - left)/2); if (nums[mid] > target) { - right = mid; // 去左区间寻找 + right = mid - 1; // 去左面闭区间寻找 } else if (nums[mid] < target) { - left = mid + 1; // 去右区间寻找 + left = mid + 1; // 去右面闭区间寻找 } else { return mid; }