博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求数组的最长子数组之和的最大值
阅读量:6371 次
发布时间:2019-06-23

本文共 495 字,大约阅读时间需要 1 分钟。

1. 题目

    给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大。例如: 整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为20。

    编程之美上的一道题,也是常考题目之一。

2. 解答

    属于基础动态规划。递推公式如下:

    假设序列为:a[0],a[1],...,a[n-1], 定义两个新的序列:p[0],p[1],...,p[n-1],和q[0],q[1],...,q[n-1]。
    p[k]表示从a[0]到a[k]的范围,包含a[k]的最大的子序列。显然p[k]=p[k-1]>0?(p[k-1]+a[k]):a[k],p[0]=a[0]。即,如果从a[k]能向左发展,数值和会变大,就增长,否则就只有a[k]自己。
    q[k]表示从a[0]到a[k]的范围,最大的子序列长度。显然q[k]=max{q[k-1], p[k]},即要么包含a[k],要么不包含a[k]。
    而所求答案为q[n-1]。时间复杂度为2*n。

3. 备注

    答案很简单,不过快速反应出来,并且说得清楚不容易。

转载地址:http://keuqa.baihongyu.com/

你可能感兴趣的文章
《Windows Server 2012活动目录管理实践》——第 2 章 部署第一台域控制器2.1 案例任务...
查看>>
Java Date Time 教程-时间测量
查看>>
Selector.wakeup实现注记
查看>>
《Java EE 7精粹》—— 第1章 Java EE 1.1 简介
查看>>
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>
使用Annotation设计持久层
查看>>
深入实践Spring Boot2.4.1 Neo4j依赖配置
查看>>
Zen Cart 如何添加地址栏上的小图标
查看>>
SecureCrt 连接Redhat linux
查看>>
[NHibernate]持久化类(Persistent Classes)
查看>>
如何在Hive中使用Json格式数据
查看>>
linux如何恢复被删除的热文件
查看>>
Eclipse(MyEclipse) 自动补全
查看>>
Struts2中dispatcher与redirect的区别
查看>>
zabbix agentd configure
查看>>
地图点聚合优化方案
查看>>
Google Chrome 快捷方式
查看>>
备考PMP心得体会
查看>>
vue proxy匹配规则
查看>>