• 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;
        }
    }
  • 相关阅读:
    U1. 广度优先搜索(BFS)和 广度优先搜索(DFS)
    C5. Spring 服务的注册与发现(Spring Cloud Eureka)
    S3. Android 消息推送
    S2. Android 常用控件
    S12. Android 检查更新功能实现
    S1. Android 功能大全
    B9 Concurrent 重入锁(ReentrantLock)
    117.dom2事件
    106.事件的传播机制
    105.事件对象及兼容处理
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10793148.html
Copyright © 2020-2023  润新知