动态规划,思路同子数组最大乘积(全为正数)一样,dp[i][0]代表当前以arr[i]结尾的最大乘积正数,dp[i][1]为最小乘积负数。
转移方程:
1.当arr[i]>0时:
dp[i][0]=max(dp[i-1][0]arr[i],arr[i]),dp[i][1]=dp[i-1][1]arr[i].
2.当arr[i]==0,dp[i][0]=dp[i[1]=0.
3.当arr[i]<0时,dp[i][0]=dp[i-1][]arr[i].dp[i][1]=min(dp[i-1][0]arr[i]).
边界条件: dp[-1][0]=-1,dp[-1][1]=1,最后同步更新ans即可。