152. 乘积最大子数组

又是一次失败的思路,这是因为我想到了用动态规划,但是我的动态规划很拉

答案的动态规划

但是我又分析了一下,因为都是整数,负数个数为偶数则全部相乘,因为为整数,为正就只管乘了,为奇则只乘两端负数其中一个

我想到了最大连续加,是找到只要没有小于0就继续加,就还有价值,记录最大值即可。这是只要一直乘,最后为正即可

虽然我觉得我的够精妙,但是我觉得还是不如答案,看了答案自己默写一遍

max_element(begin(),end())获取最大值地址

 

错的代码:

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int result=-10000000000;
        vector<vector<int>>v(nums.size(),vector<int>(nums.size(),0));
        for(int i = 0 ;i < nums.size();i++){
            v[i][i] = nums[i];
            if(v[i][i]>result)
                    result = v[i][i];
            for(int j=i+1 ; j< nums.size();j++){
                v[i][j] = v[i][j-1]*nums[j];
                if(v[i][j]>result)
                    result = v[i][j];
            }
        }
        return result;
    }
};

正确的:

 

posted @ 2021-12-15 19:32  jozon  阅读(21)  评论(0)    收藏  举报