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);
        }
    }
  • 相关阅读:
    WingIIDE的licese破解方法
    HttpCookie
    Jquery中html()方法 and "click"绑定后代元素
    jquery 选择器多个
    input标签的type为select、radio、checkbox的使用
    c#中?和??使用
    VS中使用附加进程来调试项目
    刷新局部页面
    ant design vue 文件上传的集中页面
    vue 上传超大文件出现Uncaught (in promise) Error: Network Error at createError
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/6079446.html
Copyright © 2011-2022 走看看