leetcode 152. 乘积最大子数组

2023.10.29

leetcode 152. 乘积最大子数组_第1张图片

         本题注意一个关键点:如果nums数组当前元素是一个负数的话,那么之前最小的负数乘积乘以当前这个元素就会变成一个最大乘积了。  所以我们不能只盯着最大乘积看,最小乘积也需要保存。         

        具体来说,定义两个局部变量local_max和local_min记录当前乘积最大值和乘积最小值,再定义一个全局最大值max。 遍历nums数组的时候,先进行判断:当前元素如果是负数的话,将local_max和local_min的数值交换。 因为经过负数相乘,最大的会变成最小的,最小的会变成最大的。  具体java代码如下:

class Solution {
    public int maxProduct(int[] nums) {
        int max = Integer.MIN_VALUE;
        int local_max = 1;
        int local_min = 1;
        for(int i=0; i

你可能感兴趣的:(leetcode专栏,leetcode,算法,数据结构,java)