子数组之和最大值(二维数组)

来源:互联网 发布:智慧工地软件加盟 编辑:程序博客网 时间:2024/06/11 16:35

我们在前面分析了一维数组的子数组之和最大值的问题,那么如果是二维数组又该如何分析呢?

最直接的方法,当然就是枚举每一个矩形区域,然后再求这个矩形区域中元素的和。

解法一:枚举

  采用这种方法的时间复杂度为O(N2*M2*sum的时间复杂度)。

  对于部分和sum,可以作一个预处理,设p[i][j]表示从arr[0][0]加到arr[i][j]的和;

  则从arr[i1][j1]加到arr[i2][j2]的和为:

  sum(arr, i1, i2, j1, j2) = p[i2][j2] + p[i1-1][j1-1] - p[i1-1][j2] - p[i2-1][j1]

  这个预处理的时间复杂度为O(NM),算法时间复杂度为O(N2*M2)。

方法二:动态规划

  假设已经确定了矩形区域的上下边界,比如知道矩形区域的上下边界分别是第a行和第c行,现在要确定左右边界。

  其实这个问题就是一维的,可以把每一列中第a行和第c行之间的元素看成一个整体。即求数组(BC[1], ..., BC[M])中和最大的一段,其中BC[i]=B[a][i] + ... + B[c][i]。

  这样,我们枚举矩形的上下边界,然后再用一维情况下的方法确定左右边界,就可以得到二维问题的解。新的方法的时间复杂度为O(N*M*min(N, M))。

public class Array_2 {public static void main(String[] args){int[][] h={{1,2,3},{4,-5,6},{7,8,9}};System.out.println(Maxsum_2(h));}public static int Maxsum_2(int[][] arr){int maxumum=Integer.MIN_VALUE;for(int i=0;i<arr.length;i++){for(int j=i;j<arr.length;j++){//System.out.print("i="+i+"j="+j+" ");int sum=0;int[] n = new int[arr[0].length];for(int w=0;w<arr[0].length;w++){sum=0;for(int k=i;k<=j;k++){sum = sum+arr[k][w];}n[w]=sum;//System.out.print(w+" "+n[w]+" ");}if(Maxsum_ultimate(n)>maxumum)maxumum =Maxsum_ultimate(n);}}return maxumum;}public static int Maxsum_ultimate(int[] arr)//一维数组子数组最大计算公式,O(N).{int maxSum = Integer.MIN_VALUE;int sum = 0;for(int i = 0; i < arr.length; ++i){if(sum < 0){sum = arr[i];}else{sum += arr[i];}if(sum > maxSum){maxSum = sum;}}return maxSum;}}
结果如下:

35


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 轩辕传奇手游金币用错了怎么办 神秘时代4法杖按键冲突怎么办 孕2个月发烧38度怎么办 不知道怀孕喝了止咳糖浆怎么办? 小孩刮头发的备皮刀割住手怎么办? 天梭手表里面的刻度掉了怎么办 国战天下手游帐号丢失怎么办 肺力咳合剂一次喝了50多了怎么办 头孢和藿香正气水一起吃了怎么办 小儿胃蛋自酶合剂吃多了怎么办 刚出生的婴儿很容易被惊醒怎么办 1个多月的宝宝小腿不直怎么办 20个月宝宝腿不直小腿外八怎么办 小孩手青枝骨骨折拆石膏还弯怎么办 宝宝喝柴胡注射剂有不良反应怎么办 九个月宝宝便秘拉不出来怎么办 一岁四个月的宝宝便秘怎么办 热血三国3要塞打不过去怎么办 清香木夏天有黄叶和掉叶怎么办 生完宝宝妊娠纹还在继续疯长怎么办 陌陌不能最小化观看直播视频怎么办 苏州园区公积金密码忘记了怎么办 房产企业申请破产买的房子怎么办 被业务员骗了买了保险怎么办 孩子特别害怕老师严厉的批评怎么办 4k电视看有线电视不清晰怎么办 移动9.9流量4g网用完了怎么办 东方头条验证码已经被注册了怎么办 打王者两个人吵架被夹在中间怎么办 顾客拿过期的食品过来投诉怎么办 老婆总是埋怨我父母我该怎么办? 代款公司如果使用暴力追债怎么办 法院拍卖款分配有疑意怎么办 法院拍卖买到的房子里有户口怎么办 新注册手机邮箱不和电脑同步怎么办 移动4g盒当月流量封顶怎么办 昆仑加油卡密码忘记了怎么办 昆仑银行e盾密码忘记了怎么办 中石化加油卡密码忘记了怎么办 壳牌加油卡密码忘了怎么办 中国石化加油卡密码忘了怎么办