diff --git a/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README.md b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README.md index 11abae21558b8..e1d4dcd13aca8 100644 --- a/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README.md +++ b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README.md @@ -61,7 +61,20 @@ ```python - +class Solution: + def maxSumTwoNoOverlap(self, nums: List[int], firstLen: int, secondLen: int) -> int: + n = len(nums) + s = [0] * (n + 1) + for i in range(1, n + 1): + s[i] = s[i - 1] + nums[i - 1] + ans1, ans2, fm, sm = 0, 0, 0, 0 + for i in range(n - firstLen - secondLen + 1): + fm = max(fm, s[i + firstLen] - s[i]) + ans1 = max(fm + s[i + firstLen + secondLen] - s[i + firstLen], ans1) + for i in range(n - firstLen - secondLen + 1): + sm = max(sm, s[i + secondLen] - s[i]) + ans2 = max(sm + s[i + firstLen + secondLen] - s[i + secondLen], ans2) + return max(ans1, ans2) ``` ### **Java** @@ -69,7 +82,25 @@ ```java - +class Solution { + public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) { + int n = nums.length; + int[] s = new int[n + 1]; + for (int i = 1; i <= n; i++) { + s[i] = s[i - 1] + nums[i - 1]; + } + int ans1 = 0, ans2 = 0, fm = 0, sm = 0; + for (int i = 0; i < n - firstLen - secondLen + 1; i++) { + fm = Math.max(s[i + firstLen] - s[i], fm); + ans1 = Math.max(fm + s[i + firstLen + secondLen] - s[i + firstLen], ans1); + } + for (int i = 0; i < n - firstLen - secondLen + 1; i++) { + sm = Math.max(s[i + secondLen] - s[i], sm); + ans2 = Math.max(sm + s[i + firstLen + secondLen] - s[i + secondLen], ans2); + } + return Math.max(ans1, ans2); + } +} ``` ### **...** diff --git a/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README_EN.md b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README_EN.md index 45ad210275551..b9972f411b228 100644 --- a/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README_EN.md +++ b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/README_EN.md @@ -85,13 +85,44 @@ ### **Python3** ```python - +class Solution: + def maxSumTwoNoOverlap(self, nums: List[int], firstLen: int, secondLen: int) -> int: + n = len(nums) + s = [0] * (n + 1) + for i in range(1, n + 1): + s[i] = s[i - 1] + nums[i - 1] + ans1, ans2, fm, sm = 0, 0, 0, 0 + for i in range(n - firstLen - secondLen + 1): + fm = max(fm, s[i + firstLen] - s[i]) + ans1 = max(fm + s[i + firstLen + secondLen] - s[i + firstLen], ans1) + for i in range(n - firstLen - secondLen + 1): + sm = max(sm, s[i + secondLen] - s[i]) + ans2 = max(sm + s[i + firstLen + secondLen] - s[i + secondLen], ans2) + return max(ans1, ans2) ``` ### **Java** ```java - +class Solution { + public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) { + int n = nums.length; + int[] s = new int[n + 1]; + for (int i = 1; i <= n; i++) { + s[i] = s[i - 1] + nums[i - 1]; + } + int ans1 = 0, ans2 = 0, fm = 0, sm = 0; + for (int i = 0; i < n - firstLen - secondLen + 1; i++) { + fm = Math.max(s[i + firstLen] - s[i], fm); + ans1 = Math.max(fm + s[i + firstLen + secondLen] - s[i + firstLen], ans1); + } + for (int i = 0; i < n - firstLen - secondLen + 1; i++) { + sm = Math.max(s[i + secondLen] - s[i], sm); + ans2 = Math.max(sm + s[i + firstLen + secondLen] - s[i + secondLen], ans2); + } + return Math.max(ans1, ans2); + } +} ``` ### **...** diff --git a/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/Solution.java b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/Solution.java new file mode 100644 index 0000000000000..284b7509886b2 --- /dev/null +++ b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/Solution.java @@ -0,0 +1,19 @@ +class Solution { + public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) { + int n = nums.length; + int[] s = new int[n + 1]; + for (int i = 1; i <= n; i++) { + s[i] = s[i - 1] + nums[i - 1]; + } + int ans1 = 0, ans2 = 0, fm = 0, sm = 0; + for (int i = 0; i < n - firstLen - secondLen + 1; i++) { + fm = Math.max(s[i + firstLen] - s[i], fm); + ans1 = Math.max(fm + s[i + firstLen + secondLen] - s[i + firstLen], ans1); + } + for (int i = 0; i < n - firstLen - secondLen + 1; i++) { + sm = Math.max(s[i + secondLen] - s[i], sm); + ans2 = Math.max(sm + s[i + firstLen + secondLen] - s[i + secondLen], ans2); + } + return Math.max(ans1, ans2); + } +} \ No newline at end of file diff --git a/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/Solution.py b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/Solution.py new file mode 100644 index 0000000000000..fbdad440c62a8 --- /dev/null +++ b/solution/1000-1099/1031.Maximum Sum of Two Non-Overlapping Subarrays/Solution.py @@ -0,0 +1,14 @@ +class Solution: + def maxSumTwoNoOverlap(self, nums: List[int], firstLen: int, secondLen: int) -> int: + n = len(nums) + s = [0] * (n + 1) + for i in range(1, n + 1): + s[i] = s[i - 1] + nums[i - 1] + ans1, ans2, fm, sm = 0, 0, 0, 0 + for i in range(n - firstLen - secondLen + 1): + fm = max(fm, s[i + firstLen] - s[i]) + ans1 = max(fm + s[i + firstLen + secondLen] - s[i + firstLen], ans1) + for i in range(n - firstLen - secondLen + 1): + sm = max(sm, s[i + secondLen] - s[i]) + ans2 = max(sm + s[i + firstLen + secondLen] - s[i + secondLen], ans2) + return max(ans1, ans2) \ No newline at end of file