IT公司100题-3-求数组的最大子序列的和
2024-10-16 17:48:12
问题描述:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2
因此输出为该子数组的和18。
分析:
最直接的方法就是找出所有的子数组,然后求其和,取最大。如果每个子数组都遍历求和,该方法的复杂度为O(N^3)。
时间复杂度O(n)的实现代码,如下所示:
// 3.cc
#include <iostream>
using namespace std; // 求子数组连续最大和
int max_sub_sum(int* a, int n) {
int sum = a[n - ];
int start = a[n - ];
for(int i = n - ; i >= ; i--) {
start = max(start + a[i], a[i]);
sum = max(sum, start);
}
return sum;
} int main() {
int a[] = {-, , , -, , -, };
int max_sub = max_sub_sum(a, );
cout << "max sub sum is: " << max_sub << endl;
}
最新文章
- C# 异步编程小结
- Windows安装 ANT
- Web Service(1.8)
- Ionic 小节
- jdk1.5多线程Lock接口及Condition接口
- Golang 网络爬虫框架gocolly/colly 五 获取动态数据
- QT 操作 excel 教程
- javascript之Style对象
- 面向对象版Tab栏切换
- JS 操作svg画图
- 【iCore4 双核心板_ARM】例程三十四:U_DISK_IAP_ARM实验——更新升级STM32
- python中的reverse
- 849. Maximize Distance to Closest Person
- 请读下面的这句绕口令:ResourceManager中的Resource Estimator框架介绍与算法剖析
- IPhoneX网页布局 全屏布局(转)
- MapReduce的分区
- yyblog2.0 数据库开发规范
- ios开发中怎么获取应用崩溃日志
- System.DateTime.Now.ToString(";yyyy-MM-dd HH:mm:ss";) 显示24小时制;System.DateTime.Now.ToString(";yyyy-MM-dd hh:mm:ss";)显示12小时制
- django网页的分页功能,大家如果有疑问请留言