返回一个二维整数数组中最大联通子数组的和
2015-06-17 13:49
218 查看
一.题目
输入一个二维整形数组,数组里有正数也有负数。
求所有子数组的和的最大值。
二.设计思想
(方法一)首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组。再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标。这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到;第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价。最后得到的就是最大联通子数组的和。
(方法二)在二维整形数组中,数据可能会有正也有负,要求最大值,我们重点关注正数,所以要首先判断二维数组中哪些位置上的数是正数,利用另一个二维数组记录正数的位置,然后判断哪些数是连通的。首先定位这个二维数组中的最大值,然后在分析这个值周围的4个数,联通这4个数中的正数,若全为负数,则查找次大值,并与最大值联通,判断联通前与联通后值得大小,若变小则不联通最大值,若变大则联通最大值,以此类推,直到最大联通子数组怎么联通都比原来的值小。
输入一个二维整形数组,数组里有正数也有负数。
求所有子数组的和的最大值。
二.设计思想
(方法一)首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组。再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标。这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到;第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价。最后得到的就是最大联通子数组的和。
(方法二)在二维整形数组中,数据可能会有正也有负,要求最大值,我们重点关注正数,所以要首先判断二维数组中哪些位置上的数是正数,利用另一个二维数组记录正数的位置,然后判断哪些数是连通的。首先定位这个二维数组中的最大值,然后在分析这个值周围的4个数,联通这4个数中的正数,若全为负数,则查找次大值,并与最大值联通,判断联通前与联通后值得大小,若变小则不联通最大值,若变大则联通最大值,以此类推,直到最大联通子数组怎么联通都比原来的值小。
相关文章推荐
- 黑马程序员-------IO流
- js请求的几种方式
- IntelliJ IDEA 13.0使用
- Linux系统编程——进程间通信:信号中断处理
- maven环境快速搭建
- 决策树建模
- 无线路由器的一些高级参数
- 关于:HTTP Header -> Content-Type: text/plain Cache-Control: no-cache IE浏览器弹出错误下载对话
- linux 命令——37 date (转)
- Linux系统编程——进程间通信概述
- 最新版SDWebImage的使用
- http协议使用实例
- mysql有回滚,php没有回滚的说法
- 网站分析相关汇总
- 使用ajaxForm提交表单获取CKEditor值的问题
- swift-导航栏和tabbar(系统自带)
- 基于9款CSS3鼠标悬停相册预览特效
- Linux系统编程——进程替换:exec 函数族
- ORACLE中添加删除主键 2008-12-11 10:19:33
- curl_easy_setopt-curl库的关键函数之一