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..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,37 +190,70 @@ 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 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..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,37 +184,70 @@ 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 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.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; +}; 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; }