码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode 152. Maximum Product Subarray --------- java

时间:2016-11-19 02:09:34      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:within   nbsp   one   turn   ges   速度   blog   sub   res   

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.

 

找出最大的相乘的数字,很简单,代码还可以优化的地方很多。但是速度还可以。

 

public class Solution {
    public int maxProduct(int[] nums) {
        int len = nums.length;
        if( nums.length == 1)
            return nums[0];
        int[] result = new int[2];
        int target = 0;
        
        int left_right = 0,right_left = 0;
        for( int i = 0 ; i < len ; i ++){
            if( nums[i] == 0){
                target = Math.max(target,result[0]);
                result[0] = 0;
                result[1] = 0;
                target = 0;
            }else if( nums[i] > 0 ){
                if( result[0] != 0)
                    result[0] *= nums[i];
                else
                    result[0] = nums[i];
            }else if( nums[i] < 0 ){
                if( result[1] == 0 ){
                    result[1] = nums[i]*(result[0] == 0?1:result[0]);
                    result[0] = 0;
                }
                else{
                    if( result[0] == 0){
                        result[0] = result[1]*nums[i];
                        result[1] = 0;
                    }else{
                        result[0] = result[0]*result[1]*nums[i];
                        result[1] = 0;
                    }
                }
            }
            left_right = Math.max(Math.max(result[0],target),left_right);

        }

        target = 0;
        result[0] = 0;
        result[1] = 0;
        for( int i = len-1;i>=0;i--){
            if( nums[i] == 0){
                target = Math.max(target,result[0]);
                result[0] = 0;
                result[1] = 0;
                target = 0;
            }else if( nums[i] > 0 ){
                if( result[0] != 0)
                    result[0] *= nums[i];
                else
                    result[0] = nums[i];
            }else if( nums[i] < 0 ){
                if( result[1] == 0 ){
                    result[1] = nums[i]*(result[0] == 0?1:result[0]);
                    result[0] = 0;
                }
                else{
                    if( result[0] == 0){
                        result[0] = result[1]*nums[i];
                        result[1] = 0;
                    }else{
                        result[0] = result[0]*result[1]*nums[i];
                        result[1] = 0;
                    }
                }
            }
        right_left = Math.max(Math.max(result[0],target),right_left);
        }


        return Math.max(left_right,right_left);
    }
}

 

leetcode 152. Maximum Product Subarray --------- java

标签:within   nbsp   one   turn   ges   速度   blog   sub   res   

原文地址:http://www.cnblogs.com/xiaoba1203/p/6079446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!