连续子数组的最大和
2023-02-18 16:36:15 时间
题目:
![](https://img2020.cnblogs.com/blog/2168218/202012/2168218-20201223151120815-2141043814.png)
思路:
先是说一说对这道题的理解吧,这题要么采用的是暴力破解方法,采用双循环的方式。
通过一层循环,决定起始位置,然后不断循环从起始位置加起用于存储最大值。
或者采用动态规划,寻找出规律F(N) = F(N-1) + A[N]
这种方法的时间复杂度为O(N),空间复杂度为O(N)。
代码示例:
public class Solution {
public static void main(String[] args) {
int[] arr = {1, -2, 3, 10, -4, 7, 2, -5};
int result = FindGreatestSumOfSubArray(arr);
System.out.println(result);
}
public static int FindGreatestSumOfSubArray(int[] array) {
int len = array.length;
if (len == 0) {
return 0;
}
//用于存储动态规划的结果数组
int[] currentsum = new int[len];
currentsum[0] = array[0];
int maxsum = array[0];
for (int i = 1; i < len; i++) {
//利用F(N) = F(N-1) + A[N] 来记录以第i个数字结尾的子数组的最大和
//此外要记得如果F(N)<0,则下一次会直接拿A[N]赋值进去,因为如果是负数了,那么与后面的数相加只会起到变小作用
//此外,另用一个变量存储遇到的最大的连续子数组的和。
if (currentsum[i - 1] > 0) {
currentsum[i] = currentsum[i - 1] + array[i];
} else {
currentsum[i] = array[i];
}
if (currentsum[i] > maxsum) {
maxsum = currentsum[i];
}
}
return maxsum;
}
}
相关文章
- [HTTP]解决406 not acceptable 错误
- [PHP] 接口增加recaptcha行为验证
- [PHP] Workerman中的注册树模式
- [日常] 解决mysql localhost可以连接但是127.0.0.1不能连接
- [日常] ubuntu下安装php pdo扩展和导入数据库
- [Nginx] nginx配置域名反代后端端口
- [PHP] 使用适配器模式处理数据库对象
- [PHP]使用策略模式消除if else
- [日常] win10开启和安装ubuntu子系统
- [PHP] 解释FastCGI与PHP-FPM的关系
- [PHP] stream_set_blocking非阻塞模式影响fgets fread函数
- [日常] 解决PHP Warning: Module 'mysqli' already loaded in Unknown on line 0
- [PHP]PHP请求在PHP-FPM下的生命周期
- [PHP]解决500错误问题-nginx以及fpm没有任何错误日志
- [日常] windows下使用vscode配合xebug调试php脚本
- [PHP] cli环境下php设置进程名字
- [PHP]解决 Call-time pass-by-reference has been removed
- [PHP]解决PHP Call to undefined function ldap_connect()
- [Nginx] Nginx配置PHP应用传递PATH_INFO变量
- [PHP]解决PHP Fatal error: Call to undefined function mcrypt_get_iv_size()