数组中子数组的最大累乘积

题目

给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

思路

子序列->前面一串决定当前位置
子数组/子串(必须连续)->以当前位置结尾决定相邻后面的状态

因此,本题目必须是以当前位置结尾的位置决定后面的位置

因此本题目有3中决策

  • max[i]*a[i+1],比如{1,2,3,4}
  • min[i]*a[i+1],比如{-5,2,-5}
  • a[i+1],比如{0,0,100}
    值得注意的是此题目求的是最大值,但是必须记录最小值,因为乘法运算2个最小值相乘可能是最大值

代码

1
2