动态规划

人走茶凉 提交于 2020-08-07 06:19:04

152. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

示例 1:

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

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

package com.demo.thinking;

import java.util.Arrays;
import java.util.List;

public class MaxProduct {

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(-2, 0, -1, 3, 6);
        int i = maxProduct(list);
        System.out.println(i);

    }

   public static int maxProduct(List<Integer> nums) {
       Integer maxF = nums.get(0), minF = nums.get(0), ans = nums.get(0);
        for (int i = 1; i < nums.size(); ++i) {
            int mx = maxF, mn = minF;

            maxF = Math.max(mx * nums.get(i), Math.max(nums.get(i), mn * nums.get(i)));
            minF = Math.min(mn * nums.get(i), Math.min(nums.get(i), mx * nums.get(i)));
            ans = Math.max(maxF, ans);
        }
        return ans;
    }
}

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!