剑指Offer:面试题31——连续子数组的最大和(java实现)
2024-10-10 16:36:50
问题描述 :
输入一个整数数组,数组里面有正数也有负数。数组中一个或连续几个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)
思路1:常规解法,不知道怎么描述了。。
代码:
boolean invalidInput = false;
public int FindGreatestSumOfSubArray(int[] array) {
if(array == null || array.length == 0){
invalidInput = true;
return 0;
}
int currentSum = 0;
int greatestSum = 0x80000000;
for(int i = 0; i < array.length; i++){
if(currentSum < 0){
currentSum = array[i];
}else{
currentSum += array[i]
}
if(currentSum > greatestSum){
greatestSum = currentSum;
}
}
return greatestSum;
}
思路2:动态规划
如果用函数
f(i)
表示以第i个数字结尾的子数组的最大和,那么我们需要求出max[f(i)]
,其中0<=i小于n.
递归公式如下:
f(i) = :pData[i] 当 i = 0或者f(i-1)<=0
:f(i-1)+pData[i] 当i不等于0或者f(i-1)>0
第二种解法代码与第一种其实是一样的。
最新文章
- 通过JAXB完成Java对象与XML之间的转换
- Adapter 启动时报错——2
- zoj2770 差分约束系统
- 把所有css放到一个css文件的格式
- C++类与对象
- HDU 2296 Ring (AC自动机+DP)
- HDU -2674 N!Again(小技巧)
- DataList、Repeater、GridView中的Checkbox取值问题
- nova-compute[5410]: OSError: [Errno 13] Permission denied: &;#39;图像路径&;#39;
- 基于注解的Spring MVC的简单入门——简略版
- js模块化规范
- 深入理解OkHttp源码(一)——提交请求
- mint-ui笔记
- 第七天 py
- VsCode 的使用
- ethereum/EIPs-1077 Executable Signed Messages
- Spring的 AOP底层用到两种代理机制
- python技巧 一等函数
- tomcat 输入学习
- CODEVS.3990.中国余数定理2(CRT)