diff --git a/problems/2026-10-22-max-subarray/README.md b/problems/2026-10-22-max-subarray/README.md new file mode 100644 index 0000000..5331d53 --- /dev/null +++ b/problems/2026-10-22-max-subarray/README.md @@ -0,0 +1,22 @@ +# Maximum Subarray + +## Problem + +Given an integer array `nums`, find the subarray with the largest sum, and return its sum. + +## Examples + +``` +Input: nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4] +Output: 6 +Explanation: [4, -1, 2, 1] has sum 6. +``` + +## Constraints + +- `1 <= nums.length <= 10^5` +- `-10^4 <= nums[i] <= 10^4` + +## Notes + +Implement `maxSubArray` in `solution.js`. diff --git a/problems/2026-10-22-max-subarray/max-subarray.test.js b/problems/2026-10-22-max-subarray/max-subarray.test.js new file mode 100644 index 0000000..50d4924 --- /dev/null +++ b/problems/2026-10-22-max-subarray/max-subarray.test.js @@ -0,0 +1,17 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { maxSubArray } from "./solution.js"; + +describe("maxSubArray", () => { + it("classic kadane", () => { + assert.equal(maxSubArray([-2,1,-3,4,-1,2,1,-5,4]), 6); + }); + + it("single element", () => { + assert.equal(maxSubArray([1]), 1); + }); + + it("all negative pick max", () => { + assert.equal(maxSubArray([-2,-1]), -1); + }); +}); diff --git a/problems/2026-10-22-max-subarray/solution.js b/problems/2026-10-22-max-subarray/solution.js new file mode 100644 index 0000000..e8eb6df --- /dev/null +++ b/problems/2026-10-22-max-subarray/solution.js @@ -0,0 +1,13 @@ +/** + * @param {number[]} nums + * @returns {number} + */ +export function maxSubArray(nums) { + let best = nums[0]; + let cur = nums[0]; + for (let i = 1; i < nums.length; i++) { + cur = Math.max(nums[i], cur + nums[i]); + best = Math.max(best, cur); + } + return best; +}