zoukankan      html  css  js  c++  java
  • leetcode 152. 乘积最大子序列 java

    题目:

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

    示例 1:

    输入: [2,3,-2,4]
    输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。
    

    示例 2:

    输入: [-2,0,-1]
    输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

    解题答案:

    max:当前乘积最大值

    zheng:当前连续的乘积和(大于等于0)

    fu:当前连续的乘积和(大于等于0)

    分别判断nums[i]为正数,负数以及0的情况下:max,zheng,fu变量的变化

    class Solution {
        public int maxProduct(int[] nums) {
            if(nums.length < 1)
                return 0;
            if(nums.length == 1)
                return nums[0];
            int zheng = 0; //当前连续的最大值 正数
            int fu = 0; //当前连续的最小值 负数
            int max = nums[0];
            if(nums[0] > 0)
                zheng = nums[0];
            if(nums[0] < 0)
                fu = nums[0];
    
            for(int i = 1; i < nums.length; i++)
            {
                if(nums[i] > 0)
                {
                    if(zheng > 0)
                    {
                        zheng = zheng * nums[i];
                    }
                    else
                        zheng = nums[i];
                    if(zheng > max)
                        max = zheng;
                    if(fu < 0)
                    {
                        fu = fu * nums[i];
                    }      
                }
                else if(nums[i] == 0)
                {
                    zheng = 0;
                    fu = 0;
                    if(0 > max)
                        max = 0;
                }
                else{
                    //nums[i]为负数 则fu zheng要进行相应的变化
                    int temp = zheng;
                    if(fu < 0)
                    {
                        zheng = fu * nums[i];
                        if(zheng > max)
                            max = zheng;
                    }
                    else
                    {
                        zheng = 0;
                    }
                    if(temp > 0)
                    {
                        fu = temp * nums[i];
                    }
                    else{
                        fu = nums[i];
                    }
                    
                }
            }
            return max;
        }
    }
  • 相关阅读:
    (转)Java垃圾回收机制
    ThreadPoolExecutor线程池参数说明
    深入Synchronized和java.util.concurrent.locks.Lock的区别详解
    java集合类说明及区别
    JAVA中堆栈和内存分配
    深入理解Java对象序列化
    Java 序列化Serializable
    transient在java中的作用
    let和const命令
    第9章 css3多列布局
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10793148.html
Copyright © 2011-2022 走看看