返回一个二维整数数组中最大联通子数组的和(思路)
2015-06-17 11:14
411 查看
返回一个二维整数数组中最大联通子数组的和
题目:
输入一个二维整形数组,数组里有正数也有负数。
求所有子数组的和的最大值。
思路:
(方法一)首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组。再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标。这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到;第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价。最后得到的就是最大联通子数组的和。
(方法二)在二维整形数组中,数据可能会有正也有负,要求最大值,我们重点关注正数,所以要首先判断二维数组中哪些位置上的数是正数,利用另一个二维数组记录正数的位置,然后判断哪些数是连通的。首先定位这个二维数组中的最大值,然后在分析这个值周围的4个数,联通这4个数中的正数,若全为负数,则查找次大值,并与最大值联通,判断联通前与联通后值得大小,若变小则不联通最大值,若变大则联通最大值,以此类推,直到最大联通子数组怎么联通都比原来的值小。
题目:
输入一个二维整形数组,数组里有正数也有负数。
求所有子数组的和的最大值。
思路:
(方法一)首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组。再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标。这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到;第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价。最后得到的就是最大联通子数组的和。
(方法二)在二维整形数组中,数据可能会有正也有负,要求最大值,我们重点关注正数,所以要首先判断二维数组中哪些位置上的数是正数,利用另一个二维数组记录正数的位置,然后判断哪些数是连通的。首先定位这个二维数组中的最大值,然后在分析这个值周围的4个数,联通这4个数中的正数,若全为负数,则查找次大值,并与最大值联通,判断联通前与联通后值得大小,若变小则不联通最大值,若变大则联通最大值,以此类推,直到最大联通子数组怎么联通都比原来的值小。
相关文章推荐
- Singleton(单例模式)
- vSphere网络原理及vSwitch
- Android Xfermode 实战 实现圆形、圆角图片
- My App Crashed, Now What? – Part 1
- iOS 静态代码扫描(facebook 出品 infer)
- xml注意事项
- __I、 __O 、__IO volatile是什么?怎么用?
- 代码事项
- [HDU 3415] Max Sum of Max-K-sub-sequence
- 升级到tomcat8遇到The method getDispatcherType() is undefined for the type HttpServletRequest
- 关于使用libcurl的注意事项
- some useful website of video knownledge
- ElasticSearch读取查询结果(search)
- 坚持坚持,续昨晚
- opencv学习笔记2:HighGUI
- [Training Video - 6] [File Reading] Using log object in the Groovy class
- 使用objection来模块化开发iOS项目
- Python调用系统命令设置超时时间
- RHEL 6/CentOS 6上安装Oracle 11.2.0.3(Gird/Database)及以上缺少pdksh包的解决方法
- iptables基本用法