记录两道相似升级版(好像是华为的题)

一、最大字段和----->最大子矩阵和

1.1leetcode53.最大子序和

最大的连续子段和。f[i]表示必须以第i个数作为结尾,意思就是这个数一定会加上去,那么要看的就是这个数前面的部分要不要加上去。大于零就加,小于零就舍弃。经典的动态规划,这里我用单个变量实现它。时间复杂度O(n).

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if (nums.size()==0) return 0;
        int former=0;
        int ans=-0x3f3f3f3f;
        for (int i=0;i<nums.size();++i)
        {
            if (former>0) former+=nums[i];//这边也就是说必须以nums[i]为结尾的最大价值。
            else former=nums[i];
            if (former>ans) ans=former;
        }
        return ans;
    }
};

1.2蓝桥杯-最大子矩阵和

给一个矩阵,求最大子矩阵和,算法是多行压成一行做,枚举从i行到j行(i<=j),把这几行压成一行,然后O(m)求最大子段和,总的时间复杂度是O(n*n*m)

猜你喜欢

转载自blog.csdn.net/hbhhhxs/article/details/108118225
今日推荐