Leetcode刷题java之152. 乘积最大子序列

执行结果:

通过

显示详情

执行用时 :2 ms, 在所有 Java 提交中击败了92.22% 的用户

内存消耗 :36.7 MB, 在所有 Java 提交中击败了70.48%的用户

题目:

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

示例 1:

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


示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-product-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

首先,要维护一个当前最大值,而且,最大值乘以负数,会变成相反数,所以还要维护一个最小值。

如果遇到负数,那么最大值和最小值互换

代码:

class Solution {
    public int maxProduct(int[] nums) {
        int max=Integer.MIN_VALUE;
        //初始为1,因为1乘以任何数都是1
        int imax=1;
        int imin=1;
        for(int i=0;i<nums.length;i++)
        {
            //如果是负数,那么最大值和最小值互换
            if(nums[i]<0)
            {
                int temp=imax;
                imax=imin;
                imin=temp;
            }
            //看看是否从当前值开始
            imax=Math.max(imax*nums[i],nums[i]);
            imin=Math.min(imin*nums[i],nums[i]);
            //不断更新最大值
            max=Math.max(max,imax);
        }
        return max;
    }
}
发布了481 篇原创文章 · 获赞 506 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/104212150
今日推荐