力扣 乘积最大子数组

动态规划,注意负负得正,dp交换。

题目

力扣 乘积最大子数组_第1张图片

注意这里的dp的乘积要求最大,而两个很大的负数相乘也是大的,因此在每遍历到一个数时要存一个最大值的dp与一个最小值的dp,然后遍历完后再去存ans的dp。由于存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值。

时间复杂度: O(n),空间复杂度: O(1)。

class Solution {
    public int maxProduct(int[] nums) {
        int ans = Integer.MIN_VALUE, imax = 1, imin = 1;
        for(int i=0; i

动态规划题还是要多练。 

你可能感兴趣的:(力扣,算法,leetcode,职场和发展,java,动态规划,贪心算法)