ctci/16. Moderate problems/16.17. max_subarray.py

43 lines
1.1 KiB
Python

import unittest
def cont_seq(nums):
if not nums:
return 0
if len(nums) == 1:
return nums[0]
if len(nums) == 2:
return max(max(nums), sum(nums))
if max(nums) < 0:
return max(nums)
if max(nums) == min(nums):
return max(nums)
maxval = 0
count = 0
for n in nums:
count += n
if count < 0:
count = 0
elif count > maxval:
maxval = count
return maxval
class Test(unittest.TestCase):
data = [([], 0),
([2, -8, 3, -2, 4, -10], 5),
([2, -12, 3, -5, 4, -10], 4),
([2, 1, 1, 1, -8, 3, -1, 4, -2, 3, -1, -1, -1, -3, -6], 7),
([3, -1, 4, -2, 3, -1, -1, 3, -3, -6], 8),
([3, -1, 4, -2, 3, -1, -3, 3, -6, 4], 7),
([4, -3, 3, -4, 4, -1, 1, 3, -7], 7),
([4, -3, 3, -4, 4, -1, 1, 3, -7, 2, 2, 4], 8)]
def test_rotate_matrix(self):
for nums, expected in self.data:
res = cont_seq(nums)
self.assertEqual(res, expected)
if __name__ == "__main__":
unittest.main()