zoukankan      html  css  js  c++  java
  • leetcode 152. Maximum Product Subarray --------- java

    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);
        }
    }
  • 相关阅读:
    nput keyup 500ms 延时输入 事件处理
    browser-sync默认地址如何转成127.0.0.1
    overflow:scroll-css知识备忘
    圆角的css样式
    支付宝开发
    C#代码与javaScript函数的相互调用
    高性能web开发 如何加载JS,JS应该放在什么位置?
    Makefile自动生成头文件依赖
    一步步教你如何写Makefile
    (一):U-BOOT启动分析--概述
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/6079446.html
Copyright © 2011-2022 走看看