From 1eb14f9fe287c4bacbdf788841b58e1819c3c0db Mon Sep 17 00:00:00 2001 From: xin Date: Sat, 28 Oct 2023 18:29:48 +0800 Subject: [PATCH 1/5] =?UTF-8?q?add:=201035.=E4=B8=8D=E7=9B=B8=E4=BA=A4?= =?UTF-8?q?=E7=BA=BF=E6=96=B0=E5=A2=9Etypescript=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/1035.不相交的线.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/problems/1035.不相交的线.md b/problems/1035.不相交的线.md index ff9e5dc4..cccc7f8c 100644 --- a/problems/1035.不相交的线.md +++ b/problems/1035.不相交的线.md @@ -221,6 +221,8 @@ const maxUncrossedLines = (nums1, nums2) => { ### TypeScript: +> 二维数组 + ```typescript function maxUncrossedLines(nums1: number[], nums2: number[]): number { /** @@ -243,6 +245,33 @@ function maxUncrossedLines(nums1: number[], nums2: number[]): number { }; ``` +> 滚动数组 +```typescript +function maxUncrossedLines(nums1: number[], nums2: number[]): number { + const len1 = nums1.length + const len2 = nums2.length + + const dp: number[] = new Array(len2 + 1).fill(0) + + for (let i = 1; i <= len1; i++) { + let prev: number = 0; + let temp: number = 0; + for (let j = 1; j <= len2; j++) { + // 保存当前状态未计算前的值 + temp = dp[j] + // 使用没有累加的值进行累加 + if (nums1[i - 1] === nums2[j - 1]) dp[j] = prev + 1 + // dp[j] 表示之前的 dp[i][j-1],dp[j-1] 表示 dp[i-1][j] + else dp[j] = Math.max(dp[j], dp[j - 1]) + // 下一个元素使用前一个状态未计算的值 + prev = temp + } + } + return dp[len2] +} +``` + +

From 22ac5d47548c0f6d8d1dcc2f0649c5bb297862c5 Mon Sep 17 00:00:00 2001 From: xin Date: Sat, 28 Oct 2023 18:31:15 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=200053.=E6=9C=80=E5=A4=A7=E5=AD=90?= =?UTF-8?q?=E5=BA=8F=E5=92=8C=E5=8E=9Ftypescript=E8=BF=87=E4=B8=8D?= =?UTF-8?q?=E4=BA=86leetcode=EF=BC=8C=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0053.最大子序和(动态规划).md | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/problems/0053.最大子序和(动态规划).md b/problems/0053.最大子序和(动态规划).md index f1b64709..70ad7a84 100644 --- a/problems/0053.最大子序和(动态规划).md +++ b/problems/0053.最大子序和(动态规划).md @@ -226,18 +226,20 @@ object Solution { ```typescript function maxSubArray(nums: number[]): number { - /** - dp[i]:以nums[i]结尾的最大和 - */ - const dp: number[] = [] - dp[0] = nums[0]; - let resMax: number = 0; - for (let i = 1; i < nums.length; i++) { - dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]); - resMax = Math.max(resMax, dp[i]); + const len = nums.length + if (len === 1) return nums[0] + + const dp: number[] = new Array(len) + let resMax: number = dp[0] = nums[0] + + for (let i = 1; i < len; i++) { + dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]) + // 注意值为负数的情况 + if (dp[i] > resMax) resMax = dp[i] } - return resMax; -}; + + return resMax +} ``` From ddaba36a1257d04feea3d695f9dd072e3911ced2 Mon Sep 17 00:00:00 2001 From: xin <59196051+xin0907@users.noreply.github.com> Date: Sun, 29 Oct 2023 11:35:39 +0800 Subject: [PATCH 3/5] =?UTF-8?q?Update=201035.=E4=B8=8D=E7=9B=B8=E4=BA=A4?= =?UTF-8?q?=E7=9A=84=E7=BA=BF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新 1035.不相交的线 typescript 代码注释 --- problems/1035.不相交的线.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/problems/1035.不相交的线.md b/problems/1035.不相交的线.md index cccc7f8c..e0625a2b 100644 --- a/problems/1035.不相交的线.md +++ b/problems/1035.不相交的线.md @@ -257,13 +257,14 @@ function maxUncrossedLines(nums1: number[], nums2: number[]): number { let prev: number = 0; let temp: number = 0; for (let j = 1; j <= len2; j++) { - // 保存当前状态未计算前的值 + // 备份一下当前状态(经过上层迭代后的) temp = dp[j] - // 使用没有累加的值进行累加 + // prev 相当于 dp[j-1](累加了上层的状态) + // 如果单纯 dp[j-1] 则不会包含上层状态 if (nums1[i - 1] === nums2[j - 1]) dp[j] = prev + 1 // dp[j] 表示之前的 dp[i][j-1],dp[j-1] 表示 dp[i-1][j] else dp[j] = Math.max(dp[j], dp[j - 1]) - // 下一个元素使用前一个状态未计算的值 + // 继续使用上一层状态更新参数用于当前层下一个状态 prev = temp } } From ef1c72a36b6fcc11ad2e45ac48f12630f24e6cc9 Mon Sep 17 00:00:00 2001 From: xin Date: Sun, 29 Oct 2023 17:40:58 +0800 Subject: [PATCH 4/5] =?UTF-8?q?update:=20=E4=BC=98=E5=8C=96=200392.?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=AD=90=E5=BA=8F=E5=88=97=20typescript=20?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0392.判断子序列.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/problems/0392.判断子序列.md b/problems/0392.判断子序列.md index f7863c94..8d1a0208 100644 --- a/problems/0392.判断子序列.md +++ b/problems/0392.判断子序列.md @@ -221,21 +221,19 @@ function isSubsequence(s: string, t: string): boolean { /** dp[i][j]: s的前i-1个,t的前j-1个,最长公共子序列的长度 */ - const sLen: number = s.length, - tLen: number = t.length; - const dp: number[][] = new Array(sLen + 1).fill(0) - .map(_ => new Array(tLen + 1).fill(0)); + const sLen = s.length + const tLen = t.length + const dp: number[][] = new Array(sLen + 1).fill(0).map(_ => new Array(tLen + 1).fill(0)) + for (let i = 1; i <= sLen; i++) { for (let j = 1; j <= tLen; j++) { - if (s[i - 1] === t[j - 1]) { - dp[i][j] = dp[i - 1][j - 1] + 1; - } else { - dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); - } + if (s[i - 1] === t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1 + // 只需要取 j-2 的 dp 值即可,不用考虑 i-2 + else dp[i][j] = dp[i][j - 1] } } - return dp[sLen][tLen] === s.length; -}; + return dp[sLen][tLen] === s.length +} ``` ### Go: From 74417c7695011c3c49d702f17cde22dfbce7aef3 Mon Sep 17 00:00:00 2001 From: xin Date: Sun, 29 Oct 2023 17:43:18 +0800 Subject: [PATCH 5/5] =?UTF-8?q?add:=200392.=E5=88=A4=E6=96=AD=E5=AD=90?= =?UTF-8?q?=E5=BA=8F=E5=88=97=20typescript=20=E6=96=B0=E5=A2=9E=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E6=95=B0=E7=BB=84=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0392.判断子序列.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/problems/0392.判断子序列.md b/problems/0392.判断子序列.md index 8d1a0208..ebd567cb 100644 --- a/problems/0392.判断子序列.md +++ b/problems/0392.判断子序列.md @@ -216,6 +216,8 @@ const isSubsequence = (s, t) => { ### TypeScript: +> 二维数组 + ```typescript function isSubsequence(s: string, t: string): boolean { /** @@ -236,6 +238,31 @@ function isSubsequence(s: string, t: string): boolean { } ``` +> 滚动数组 +```typescript +function isSubsequence(s: string, t: string): boolean { + const sLen = s.length + const tLen = t.length + const dp: number[] = new Array(tLen + 1).fill(0) + + for (let i = 1; i <= sLen; i++) { + let prev: number = 0; + let temp: number = 0; + for (let j = 1; j <= tLen; j++) { + // 备份一下当前状态(经过上层迭代后的) + temp = dp[j] + // prev 相当于 dp[j-1](累加了上层的状态) + // 如果单纯 dp[j-1] 则不会包含上层状态 + if (s[i - 1] === t[j - 1]) dp[j] = prev + 1 + else dp[j] = dp[j - 1] + // 继续使用上一层状态更新参数用于当前层下一个状态 + prev = temp + } + } + return dp[tLen] === sLen +} +``` + ### Go: 二维DP: