一、最大字段和----->最大子矩阵和
最大的连续子段和。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)