数组中子数组的最大累乘积
题目
给定一个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个最小值相乘可能是最大值
代码
|