Sliding window max (peeked a bit)

This commit is contained in:
2023-10-31 00:58:52 -04:00
parent 01a189c5ee
commit cb68a35b1b
4 changed files with 39 additions and 31 deletions
+27 -13
View File
@@ -1,4 +1,6 @@
import copy
import itertools
import math
import random
import typing
@@ -538,19 +540,31 @@ def copy_random_list(
def sum_max_sub_array(nums: list[int]) -> int:
window_size: int = 1
begin: int = 0
end: int = window_size
max_sum: int = sum(nums)
mmax = last = prev = nums[0]
while end - begin <= len(nums):
while end <= len(nums):
max_sum = max(max_sum, sum(nums[begin:end]))
begin += 1
end += 1
for i in range(1, len(nums)):
prev = nums[i] + last
last = max(nums[i], prev)
mmax = max(mmax, last)
window_size += 1
begin = 0
end = window_size
return mmax
return max_sum
def sum_max_sub_array_accum(nums: list[int]) -> int:
accum: list[int] = [nums[0]]
for i in range(1, len(nums)):
prev: int = nums[i] + accum[-1]
accum.append(max(nums[i], prev))
return max(accum)
def accum_sub_array_maxes(nums: list[int]) -> list[int]:
accum: list[int] = [nums[0]]
for i in range(1, len(nums)):
prev: int = nums[i] + accum[-1]
accum.append(max(nums[i], prev))
return accum