热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

53  给定一个整数数组,找到一个具有最大和的连续子数组,返回其最大和

点击此处返回总目录【题目】【方法一】求和最大的一段nums[a]nums[b]最大,即sum[b]-sum[a-1]最大。我们先来求出sum数组。sum[i]为

                                                                                                                                       点击此处返回总目录

 

 

【题目】

 

【方法一】

求和最大的一段nums[a]+...+nums[b]最大,即sum[b] - sum[a-1]最大。

我们先来求出sum数组。sum[i]为从前i项和。

原数组:[-2,  1,  -3,  4,  -1,  2,  1,  -5,  4]

累加和:[-2, -1,  -4,  0,  -1,  1,  2,  -3,  1]

现在的问题是,前面找一个数i,后面找一个数j,使得两数之差sum[j]-sum[i]最大。这就类似于121题,求股票的最大收益,前面找一个值买入,后面找一个值卖出,然后求最大收益。

不过这里有点不一样,就是如果都是正数,如3,2,4,8,1。最好的结果为8,不是8-2=6。所以,如果前面的数是正数,减去一个正数会变小,不如不减。只有前面是负数的时候,减去一个负数会变大。因此,可以设初试的min=0。

 

dp式子:

前i项的最大值 = max{前i-1项的最大值,sum[i]-min}

 

代码:

 

结果:

 

 

 

【方法二】

dp[i]表示以第i个元素为结尾的连续子数组的最大和。

以第i个元素为结尾的最大和 = max{只有自己一个元素nums[i],以第i-1为结尾的最大和+nums[i]}。因此:

if(dp[i-1]<0){

     dp[i] &#61; nums[i];

}else{

     dp[i] &#61; dp[i-1]&#43;nums[i];

}

 

举例&#xff1a;

原数组&#xff1a;[-2,  1,  -3,  4,  -1,  2,  1,  -5,  4]

dp[0]   &#xff1a;[-2,                                          ]     //dp[0]&#61;-2

dp[1]   &#xff1a;[-2,  1                                      ]     //因为dp[0]&#61;-2&#xff0c;所以以1结尾的最大的和&#xff0c;不如不加前面的负数。

dp[2]   &#xff1a;[-2,  1,  -2                                ]     //dp[1]&#61;1&#xff0c;所以dp[2] &#61; 1&#43;nums[2]

dp[3]   &#xff1a;[-2,  1,  -2,  4                           ]

dp[4]   &#xff1a;[-2,  1,  -2,  4,  3                      ]

dp[5]   &#xff1a;[-2,  1,  -2,  4,  3,  5                 ]

dp[6]   &#xff1a;[-2,  1,  -2,  4,  3,  5,  6            ]

dp[7]   &#xff1a;[-2,  1,  -2,  4,  3,  5,  6,  1       ]

dp[8]   &#xff1a;[-2,  1,  -2,  4,  3,  5,  6,  1,  5  ]

 

结果为dp[6]&#61;6。

 

代码&#xff1a;

 

结果&#xff1a;

 

 

 

 

 


推荐阅读
  • MATLAB中的类别数组:存储和操作有限类别的数据
    类别数组(categorical array)是MATLAB中用于存储有限类别数据的一种特殊数组类型。它不仅提供对非数值数据的高效存储和操作,还保留了原有类别的名称,使数据处理更加直观便捷。此外,类别数组可以与表格(table)数据类型结合使用,以实现更复杂的数据分析。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本文介绍如何在R中计算过去特定天数内每个组ID的出现次数,并提供详细的代码示例和解释。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
  • 探索1000以内的完美数:因数和等于自身
    本文探讨了如何在1000以内找到所有完美数,即一个数的因数(不包括自身)之和等于该数本身。例如,6是一个完美数,因为1 + 2 + 3 = 6。通过编程实现这一过程,可以更好地理解完美数的特性。 ... [详细]
  • 本文探讨了《魔兽世界》中红蓝两方阵营在备战阶段的策略与实现方法,通过代码展示了双方如何根据资源和兵种特性进行战士生产。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
author-avatar
天人景观2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有