Medium
Given an integer array nums
, find a contiguous non-empty subarray within the array that has the largest product, and return the product.
The test cases are generated so that the answer will fit in a 32-bit integer.
A subarray is a contiguous subsequence of the array.
Example 1:
Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
Constraints:
1 <= nums.length <= 2 * 104
-10 <= nums[i] <= 10
nums
is guaranteed to fit in a 32-bit integer.func maxProduct(nums []int) int {
res := findMax(nums...)
min, max := 1, 1
for _, n := range nums {
if n == 0 {
min, max = 1, 1
continue
}
buffer := max * n
max = findMax(n*max, n*min, n)
min = findMin(buffer, n*min, n)
res = findMax(res, max)
}
return res
}
func findMax(nums ...int) int {
highest := nums[0]
for _, n := range nums {
if n > highest {
highest = n
}
}
return highest
}
func findMin(nums ...int) int {
lowest := nums[0]
for _, n := range nums {
if n < lowest {
lowest = n
}
}
return lowest
}