From 427731f797f5f25ee2a97f1ac8e394b55d4128ff Mon Sep 17 00:00:00 2001 From: Vasily Guzov Date: Sun, 10 Nov 2024 20:40:48 +0300 Subject: [PATCH] [HAI] open lesson maxSum sliding window fixed size --- lib/maxSum/index.ts | 3 +++ lib/maxSum/maxSum.test.ts | 16 ++++++++++++++++ lib/maxSum/maxSum.ts | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 lib/maxSum/index.ts create mode 100644 lib/maxSum/maxSum.test.ts create mode 100644 lib/maxSum/maxSum.ts diff --git a/lib/maxSum/index.ts b/lib/maxSum/index.ts new file mode 100644 index 0000000..696b401 --- /dev/null +++ b/lib/maxSum/index.ts @@ -0,0 +1,3 @@ +import { maxSum } from "./maxSum"; + +export default maxSum; diff --git a/lib/maxSum/maxSum.test.ts b/lib/maxSum/maxSum.test.ts new file mode 100644 index 0000000..d625883 --- /dev/null +++ b/lib/maxSum/maxSum.test.ts @@ -0,0 +1,16 @@ +import { describe, it, expect } from "vitest"; +import { maxSum } from "./maxSum.ts"; + +describe("maxSum", () => { + + it("[3, 2, 5, 9, 4 ,1] k=3 answer 18", () => { + const NUMS = [3, 2, 5, 9, 4, 1]; + expect(maxSum(NUMS, 3)).toBe(18); + }); + + it("[0, 1, 2, 8, 1 ,11, 10, 0, 0 ,5] k=4 answer 18", () => { + const NUMS = [0, 1, 2, 8, 1, 11, 10, 0, 0, 5]; + expect(maxSum(NUMS, 4)).toBe(30); + }); + +}); diff --git a/lib/maxSum/maxSum.ts b/lib/maxSum/maxSum.ts new file mode 100644 index 0000000..a1536ba --- /dev/null +++ b/lib/maxSum/maxSum.ts @@ -0,0 +1,20 @@ +export function maxSum(nums: number[], k: number) { + const L = nums.length; + + if (k > L) return 0; + + /* считаем первое окно */ + let sum = 0; + for (let i = 0; i < k; i++) { + sum += nums[i]; + } + /* смещем окно, переситываем результат, выбираем максимальный */ + let maxSumRes = sum; + for (let i = k; i < L; i++) { + sum = sum - nums[i - k] + nums[i]; + maxSumRes = Math.max(maxSumRes, sum); + } + + + return maxSumRes; +};