From 5c3a57ea1c147502a769312374853955bbdd4dca Mon Sep 17 00:00:00 2001 From: c0dedance <38075730+c0dedance@users.noreply.github.com> Date: Tue, 25 Oct 2022 21:34:47 +0800 Subject: [PATCH] =?UTF-8?q?Update=200343.=E6=95=B4=E6=95=B0=E6=8B=86?= =?UTF-8?q?=E5=88=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 内层for循环优化 --- problems/0343.整数拆分.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/problems/0343.整数拆分.md b/problems/0343.整数拆分.md index 00e6a9da..f6683954 100644 --- a/problems/0343.整数拆分.md +++ b/problems/0343.整数拆分.md @@ -89,7 +89,7 @@ dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历, 所以遍历顺序为: ``` for (int i = 3; i <= n ; i++) { - for (int j = 1; j < i - 1; j++) { + for (int j = 1; j <= i / 2; j++) { dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j)); } } @@ -110,7 +110,7 @@ public: vector dp(n + 1); dp[2] = 1; for (int i = 3; i <= n ; i++) { - for (int j = 1; j < i - 1; j++) { + for (int j = 1; j <= i / 2; j++) { dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j)); } } @@ -167,7 +167,7 @@ public: dp[2] = 2; dp[3] = 3; for (int i = 4; i <= n ; i++) { - for (int j = 1; j < i - 1; j++) { + for (int j = 1; j <= i / 2; j++) { dp[i] = max(dp[i], dp[i - j] * dp[j]); } } @@ -224,7 +224,7 @@ class Solution: # 假设对正整数 i 拆分出的第一个正整数是 j(1 <= j < i),则有以下两种方案: # 1) 将 i 拆分成 j 和 i−j 的和,且 i−j 不再拆分成多个正整数,此时的乘积是 j * (i-j) # 2) 将 i 拆分成 j 和 i−j 的和,且 i−j 继续拆分成多个正整数,此时的乘积是 j * dp[i-j] - for j in range(1, i - 1): + for j in range(1, i / 2 + 1): dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j])) return dp[n] ``` @@ -281,7 +281,7 @@ var integerBreak = function(n) { dp[2] = 1 for(let i = 3; i <= n; i++) { - for(let j = 1; j < i; j++) { + for(let j = 1; j <= i / 2; j++) { dp[i] = Math.max(dp[i], dp[i - j] * j, (i - j) * j) } } @@ -306,7 +306,7 @@ function integerBreak(n: number): number { const dp: number[] = new Array(n + 1).fill(0); dp[2] = 1; for (let i = 3; i <= n; i++) { - for (let j = 1; j <= i - 2; j++) { + for (let j = 1; j <= i / 2; j++) { dp[i] = Math.max(dp[i], j * dp[i - j], j * (i - j)); } }