From 9075b0de22084a2992ff47181f18125b9f1980ba Mon Sep 17 00:00:00 2001 From: rain84 Date: Sat, 6 Jul 2024 16:12:09 +0300 Subject: [PATCH 1/2] feat: update ts solution to lc problem: No.0410 --- .../0410.Split Array Largest Sum/README.md | 27 +++++++++---------- .../0410.Split Array Largest Sum/README_EN.md | 27 +++++++++---------- .../0410.Split Array Largest Sum/Solution.ts | 27 +++++++++---------- 3 files changed, 36 insertions(+), 45 deletions(-) diff --git a/solution/0400-0499/0410.Split Array Largest Sum/README.md b/solution/0400-0499/0410.Split Array Largest Sum/README.md index 90692f74edf19..81f5732dd9403 100644 --- a/solution/0400-0499/0410.Split Array Largest Sum/README.md +++ b/solution/0400-0499/0410.Split Array Largest Sum/README.md @@ -194,33 +194,30 @@ func splitArray(nums []int, k int) int { ```ts function splitArray(nums: number[], k: number): number { - let left = 0; - let right = 0; - for (const x of nums) { - left = Math.max(left, x); - right += x; - } + let l = Math.max(...nums); + let r = nums.reduce((a, b) => a + b); + const check = (mx: number) => { - let s = 1 << 30; - let cnt = 0; + let [s, cnt] = [0, 0]; for (const x of nums) { s += x; if (s > mx) { s = x; - ++cnt; + if (++cnt === k) return false; } } - return cnt <= k; + return true; }; - while (left < right) { - const mid = (left + right) >> 1; + + while (l < r) { + const mid = (l + r) >> 1; if (check(mid)) { - right = mid; + r = mid; } else { - left = mid + 1; + l = mid + 1; } } - return left; + return l; } ``` diff --git a/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md b/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md index 77d8d7308ba3e..e73e8cd718e80 100644 --- a/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md +++ b/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md @@ -188,33 +188,30 @@ func splitArray(nums []int, k int) int { ```ts function splitArray(nums: number[], k: number): number { - let left = 0; - let right = 0; - for (const x of nums) { - left = Math.max(left, x); - right += x; - } + let l = Math.max(...nums); + let r = nums.reduce((a, b) => a + b); + const check = (mx: number) => { - let s = 1 << 30; - let cnt = 0; + let [s, cnt] = [0, 0]; for (const x of nums) { s += x; if (s > mx) { s = x; - ++cnt; + if (++cnt === k) return false; } } - return cnt <= k; + return true; }; - while (left < right) { - const mid = (left + right) >> 1; + + while (l < r) { + const mid = (l + r) >> 1; if (check(mid)) { - right = mid; + r = mid; } else { - left = mid + 1; + l = mid + 1; } } - return left; + return l; } ``` diff --git a/solution/0400-0499/0410.Split Array Largest Sum/Solution.ts b/solution/0400-0499/0410.Split Array Largest Sum/Solution.ts index d8af128c2e9e2..25315874c25d6 100644 --- a/solution/0400-0499/0410.Split Array Largest Sum/Solution.ts +++ b/solution/0400-0499/0410.Split Array Largest Sum/Solution.ts @@ -1,29 +1,26 @@ function splitArray(nums: number[], k: number): number { - let left = 0; - let right = 0; - for (const x of nums) { - left = Math.max(left, x); - right += x; - } + let l = Math.max(...nums); + let r = nums.reduce((a, b) => a + b); + const check = (mx: number) => { - let s = 1 << 30; - let cnt = 0; + let [s, cnt] = [0, 0]; for (const x of nums) { s += x; if (s > mx) { s = x; - ++cnt; + if (++cnt === k) return false; } } - return cnt <= k; + return true; }; - while (left < right) { - const mid = (left + right) >> 1; + + while (l < r) { + const mid = (l + r) >> 1; if (check(mid)) { - right = mid; + r = mid; } else { - left = mid + 1; + l = mid + 1; } } - return left; + return l; } From dc2b35adce982bf812ab44d31bec49f7d747adf4 Mon Sep 17 00:00:00 2001 From: rain84 Date: Sat, 6 Jul 2024 16:16:24 +0300 Subject: [PATCH 2/2] feat: add js solution to lc problem: No.0410 --- .../0410.Split Array Largest Sum/README.md | 36 +++++++++++++++++++ .../0410.Split Array Largest Sum/README_EN.md | 36 +++++++++++++++++++ .../0410.Split Array Largest Sum/Solution.js | 31 ++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 solution/0400-0499/0410.Split Array Largest Sum/Solution.js diff --git a/solution/0400-0499/0410.Split Array Largest Sum/README.md b/solution/0400-0499/0410.Split Array Largest Sum/README.md index 81f5732dd9403..ddfe53ae1df6d 100644 --- a/solution/0400-0499/0410.Split Array Largest Sum/README.md +++ b/solution/0400-0499/0410.Split Array Largest Sum/README.md @@ -190,6 +190,42 @@ func splitArray(nums []int, k int) int { } ``` +#### JavaScript + +```js +/** + * @param {number[]} nums + * @param {number} k + * @return {number} + */ +var splitArray = function (nums, k) { + let l = Math.max(...nums); + let r = nums.reduce((a, b) => a + b); + + const check = mx => { + let [s, cnt] = [0, 0]; + for (const x of nums) { + s += x; + if (s > mx) { + s = x; + if (++cnt === k) return false; + } + } + return true; + }; + + while (l < r) { + const mid = (l + r) >> 1; + if (check(mid)) { + r = mid; + } else { + l = mid + 1; + } + } + return l; +}; +``` + #### TypeScript ```ts diff --git a/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md b/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md index e73e8cd718e80..30bc62a3d7ef9 100644 --- a/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md +++ b/solution/0400-0499/0410.Split Array Largest Sum/README_EN.md @@ -184,6 +184,42 @@ func splitArray(nums []int, k int) int { } ``` +#### JavaScript + +```js +/** + * @param {number[]} nums + * @param {number} k + * @return {number} + */ +var splitArray = function (nums, k) { + let l = Math.max(...nums); + let r = nums.reduce((a, b) => a + b); + + const check = mx => { + let [s, cnt] = [0, 0]; + for (const x of nums) { + s += x; + if (s > mx) { + s = x; + if (++cnt === k) return false; + } + } + return true; + }; + + while (l < r) { + const mid = (l + r) >> 1; + if (check(mid)) { + r = mid; + } else { + l = mid + 1; + } + } + return l; +}; +``` + #### TypeScript ```ts diff --git a/solution/0400-0499/0410.Split Array Largest Sum/Solution.js b/solution/0400-0499/0410.Split Array Largest Sum/Solution.js new file mode 100644 index 0000000000000..5d19e137996c9 --- /dev/null +++ b/solution/0400-0499/0410.Split Array Largest Sum/Solution.js @@ -0,0 +1,31 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number} + */ +var splitArray = function (nums, k) { + let l = Math.max(...nums); + let r = nums.reduce((a, b) => a + b); + + const check = mx => { + let [s, cnt] = [0, 0]; + for (const x of nums) { + s += x; + if (s > mx) { + s = x; + if (++cnt === k) return false; + } + } + return true; + }; + + while (l < r) { + const mid = (l + r) >> 1; + if (check(mid)) { + r = mid; + } else { + l = mid + 1; + } + } + return l; +};