mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
added a problem on kadane's algo and its solution. (#8569)
* added kadane's algorithm directory with one problem's solution. * added type hints * Rename kaadne_algorithm/max_product_subarray.py to dynamic_programming/max_product_subarray.py * Update dynamic_programming/max_product_subarray.py Co-authored-by: Christian Clauss <cclauss@me.com> * Update max_product_subarray.py * Update max_product_subarray.py * Update dynamic_programming/max_product_subarray.py Co-authored-by: Christian Clauss <cclauss@me.com> * Update max_product_subarray.py * Update max_product_subarray.py * Update max_product_subarray.py * Update max_product_subarray.py * Update max_product_subarray.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update max_product_subarray.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update max_product_subarray.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update max_product_subarray.py * Update max_product_subarray.py * Update dynamic_programming/max_product_subarray.py Co-authored-by: Christian Clauss <cclauss@me.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update dynamic_programming/max_product_subarray.py Co-authored-by: Christian Clauss <cclauss@me.com> * Update max_product_subarray.py --------- Co-authored-by: Christian Clauss <cclauss@me.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
a71f22dae5
commit
a00492911a
53
dynamic_programming/max_product_subarray.py
Normal file
53
dynamic_programming/max_product_subarray.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
def max_product_subarray(numbers: list[int]) -> int:
|
||||
"""
|
||||
Returns the maximum product that can be obtained by multiplying a
|
||||
contiguous subarray of the given integer list `nums`.
|
||||
|
||||
Example:
|
||||
>>> max_product_subarray([2, 3, -2, 4])
|
||||
6
|
||||
>>> max_product_subarray((-2, 0, -1))
|
||||
0
|
||||
>>> max_product_subarray([2, 3, -2, 4, -1])
|
||||
48
|
||||
>>> max_product_subarray([-1])
|
||||
-1
|
||||
>>> max_product_subarray([0])
|
||||
0
|
||||
>>> max_product_subarray([])
|
||||
0
|
||||
>>> max_product_subarray("")
|
||||
0
|
||||
>>> max_product_subarray(None)
|
||||
0
|
||||
>>> max_product_subarray([2, 3, -2, 4.5, -1])
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: numbers must be an iterable of integers
|
||||
>>> max_product_subarray("ABC")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: numbers must be an iterable of integers
|
||||
"""
|
||||
if not numbers:
|
||||
return 0
|
||||
|
||||
if not isinstance(numbers, (list, tuple)) or not all(
|
||||
isinstance(number, int) for number in numbers
|
||||
):
|
||||
raise ValueError("numbers must be an iterable of integers")
|
||||
|
||||
max_till_now = min_till_now = max_prod = numbers[0]
|
||||
|
||||
for i in range(1, len(numbers)):
|
||||
# update the maximum and minimum subarray products
|
||||
number = numbers[i]
|
||||
if number < 0:
|
||||
max_till_now, min_till_now = min_till_now, max_till_now
|
||||
max_till_now = max(number, max_till_now * number)
|
||||
min_till_now = min(number, min_till_now * number)
|
||||
|
||||
# update the maximum product found till now
|
||||
max_prod = max(max_prod, max_till_now)
|
||||
|
||||
return max_prod
|
Loading…
Reference in New Issue
Block a user