Sunday, October 5, 2014

152. Maximum Product Subarray ~~~~~~~~~~~最终看了别人的代码

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

Example 2:

Input: [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

A:
----------------------自己的代码-------略---------------
就是先  用0 把所有的A[i]分开, 然后,只算有正负的。这样,每次相乘的结果,绝对值都变大了。因此,可以直接maxPosProduct 和minNegProduct互相转换。
但其实,这样是没有必要的-----------------


------------------------参考了别人的geeksforgeeks的代码--------------------
public class Solution {
    public int maxProduct(int[] A) {
        assert(A!=null && A.length >0);
        if(A.length == 1)
            return A[0];
        int result = Integer.MIN_VALUE, maxEndHere = 1;// max positive product ending at the current position
        int minEndHere = 1;// min negative product ending at the current position
        for (int i = 0; i < A.length; i++) {
            if (A[i] > 0) {
                maxEndHere = maxEndHere * A[i];
                minEndHere = Math.min(minEndHere * A[i],1);
                result = Math.max(result,maxEndHere);
            } else if(A[i]==0) {
                maxEndHere = 1;
                minEndHere = 1;
                result = Math.max(result,0);// 0 can also be a product result
            }else{ // A[i]<0
                result = Math.max(minEndHere*A[i],result);
                int tmp = maxEndHere;
                maxEndHere = Math.max( minEndHere*A[i],1);
                minEndHere = tmp*A[i];
            }
        }
        return result;
    }
}
Mistakes:
1: 就是上面的这个思路了。  每次用maxEndHere 等,每次初始值都设为1
2:   when A[i]< 0 , we need calculate the result at the beginning,  因此, 我们不能简单地把result = Math.max(  ) 放到if 条件的外面。

3:  切记: A.length ==1的时候要单独列出来。


Learned:  ----------

1:  java中, given 
int a =3;
int A = {1,2,3};
运行语句:  A[a/2]是正确的
2:函数要求的返回值是double,  我们可以return一个int类型。语法是正确的

3







No comments:

Post a Comment