难度:Meidum
看到更好的做法,维护一个当前最大值和当前最小值,如果下一个元素为正,则不变;如果为负,则最大值可能转变为最小值,最小值可能转变为最大值。
1 | class Solution { |
6ms,超过15.01%
申请同样大的数组ret[],保存以对应元素结尾的最大乘积。
如果num[i] = 0,则ret[i] = 0
如果nums[i] > 0,则ret[i] = max(nums[i],nums[i]*ret[i-1])
如果nums[i] < 0,则从i-1开始寻找nums中距离i最近的一个小于0的元素,如果寻找的过程中,先找到了0,则ret[i] = 0;如果未寻找到,则ret[i] = nums[i];如果寻找到了为k,则从k乘到i,如果ret[k-1] > 0,则也要乘进最后的结果,得到ret[i]。
1 | class Solution { |
3ms,超过76.77%