题目
题目链接:
https://www.nowcoder.com/practice/abbec6a3779940aab2cc564b22d36859
思考
对于任意一个subarray来说,它最大的积,
有可能来自之前的最大积乘以一个正数(option1),
或者之前的最小积乘以一个负数(option2),
或者nums[i]就是最大的.
因此:
int option1 = maxSoFar * nums[i];
int option2 = minSoFar * nums[i];
maxSoFar = Math.max(nums[i], Math.max(option1, option2));
minSoFar = Math.min(nums[i], Math.min(option1, option2));
参考答案Java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int maxProduct (int[] nums) {
//动态规划
int n = nums.length;
int[] dpmax = new int[n];
int[] dpmin = new int[n];
dpmax[0] = nums[0];
dpmin[0] = nums[0];
int ans = nums[0];
for (int i = 1; i < n ; i++) {
int p1 = nums[i];
int p2 = dpmax[i - 1] * p1;
int p3 = dpmin[i - 1] * p1;
dpmax[i] = Math.max(p1, Math.max(p2, p3));
dpmin[i] = Math.min(p1, Math.min(p2, p3));
ans = Math.max(ans, dpmax[i]);
}
return ans;
}
}
参考答案Go
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
func maxProduct( nums []int ) int {
//动态规划
n := len(nums)
dpmax := make([]int, n)
dpmin := make([]int, n)
dpmax[0] = nums[0]
dpmin[0] = nums[0]
ans := nums[0]
for i := 1; i < n; i++ {
p1 := nums[i]
p2 := dpmax[i-1] * p1
p3 := dpmin[i-1] * p1
curmax := p1
if curmax < p2 {
curmax = p2
}
if curmax < p3 {
curmax = p3
}
curmin := p1
if curmin > p2 {
curmin = p2
}
if curmin > p3 {
curmin = p3
}
dpmax[i] = curmax
dpmin[i] = curmin
if ans < curmax {
ans = curmax
}
}
return ans
}
参考答案PHP
<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
function maxProduct( $nums )
{
//动态规划
$n = count($nums);
$dpmax = $dpmin = [0 => $nums[0]];
$ans = $nums[0];
for ($i = 1; $i < $n; $i++) {
$p1 = $nums[$i];
$p2 = $dpmax[$i - 1] * $p1;
$p3 = $dpmin[$i - 1] * $p1;
$curmax = $p1;
if ($curmax < $p2) $curmax = $p2;
if ($curmax < $p3) $curmax = $p3;
$curmin = $p1;
if ($curmin > $p2) $curmin = $p2;
if ($curmin > $p3) $curmin = $p3;
$dpmax[$i] = $curmax;
$dpmin[$i] = $curmin;
if ($ans < $curmax)
$ans = $curmax;
}
return $ans;
}