连续子数组的最大和(java版)
2017-06-09 09:19
155 查看
【题目描述】HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)
【解题思路1】
//1.设置一个临时变量,用来存储当前连续子数组的和。设置一个变量sum,存储到目前为止的最大和。
//2.若当前连续子数组的和为正数,则可以继续累加下一个元素,正向积累。若当前连续子数组的和为负数,则前面的积累无效,可以从当前位置重新累加。
//3.sum始终记录的是已知的最大和,遍历结束,返回sum。
//4.注意sum和temp的初始值。
【解题思路1】
//1.设置一个临时变量,用来存储当前连续子数组的和。设置一个变量sum,存储到目前为止的最大和。
//2.若当前连续子数组的和为正数,则可以继续累加下一个元素,正向积累。若当前连续子数组的和为负数,则前面的积累无效,可以从当前位置重新累加。
//3.sum始终记录的是已知的最大和,遍历结束,返回sum。
//4.注意sum和temp的初始值。
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { if(array==null || array.length==0){ return 0; } int sum=array[0], temp=array[0]; for(int i=1; i<array.length; i++){ temp = temp<0? array[i]:array[i]+temp; sum = sum<temp? temp: sum; } return sum; } }
相关文章推荐
- java之连续子数组的最大和
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- 算法笔记_043:最大连续子数组和(Java)
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- java求连续子数组的和最大
- 连续子数组的最大和java实现
- 笔试面试算法经典--连续子数组的最大乘积及连续子数组的最大和(Java)
- JAVA代码—算法基础:最大连续子数组乘积问题
- 求连续子数组的最大和O(n)解法之思路与Java实现
- 剑指Offer: (Java实现) 连续子数组的最大和
- 连续子数组的最大和 java实现
- java求连续子数组的和最大
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- 求不连续子数组最大和的值
- 2、 java 已知一个int数组, 编程从数组中获取最大数.
- Java之数组获取最大值
- 数组的连续子数组最大和(首尾相连)
- 6、 java 输入一个数字组成的数组,输出该数组的最大值和最小值
- Java 数组中最大递增子数组