leetcode53 最大子数组
题目描述:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大为 6。
cur = cur > 0 ? cur : 0
注意若nums[i]为负数,则将当前的累加数清空,从零开始累加,否则不为最大累加和。
public int maxSubArray(int[] nums){
if(nums.length == 0 || nums == null){
return 0;
}
int cur = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
cur += nums[i];
max = Math.max(cur, max);
cur = cur > 0 ? cur : 0;
}
return max;
}
最大子矩阵
public static int maxSum(int[][] m){
if(m == null || m[0].length == 0 || m.length == 0){
return 0;
}
int max = Integer.MIN_VALUE;
int cur = 0;
//列累加矩阵
int[] s = null;
//行遍历
for (int i = 0; i != m.length; i++) {
s = new int[m[0].length];
for (int j = i; j != m.length; j++){
//cur记录最终s[]的累加
cur = 0;
for (int k = 0; k != s.length; k++){
//s[k]记录的是每一列的累加
s[k] += m[j][k];
cur += s[k];
//max记录cur最大的累加
max = Math.max(max, cur);
cur = cur < 0 ? 0 : cur;
}
}
}
return max;
}