fa看了参考,想法快到了
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4]
,
the contiguous subarray [2,3]
has the largest product =6
和max subarray题一样,只不过需要再保存最小值
class Solution:
# @param A, a list of integers
# @return an integer
def maxProduct(self, A):
if len(A)==0:
return 0
if len(A)==1:
return A[0]
max_local = min_local = result = A[0];
for i in range(1,len(A)):
new_max = max(max(A[i]*max_local,A[i]),A[i]*min_local)
new_min = min(min(A[i]*max_local,A[i]),A[i]*min_local)
result = max(result,new_max)
max_local, min_local = new_max,new_min
return result
class Solution {
public:
int maxProduct(int A[], int n) {
if(A==NULL || n==0) return 0;
if(n==1) return A[0];
int max_local = A[0], min_local = A[0], result = A[0];
for (int i=1;i<n;i++){
int new_max = max(max(A[i],A[i]*max_local),A[i]*min_local);
int new_min = min(min(A[i],A[i]*max_local),A[i]*min_local);
result = max(result, new_max);
max_local = new_max;
min_local = new_min;
}
return result;
}
};