连续子数组的最大和

  1. 有一个整数数组,求出连续子数组的和的最大值。
  2. 有一个首尾相连的整数数组,求出连续子数组的和的最大值。
  3. 在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。

1、思路:

  动态规划思路:用函数f(i)表示以第i个数字结尾的子数组的最大和。当f(i-1)<0时,则以第i个数字结尾的子数组就是第i个数字本身;当f(i-1)>0时,f(i)=f(i-1)+i。虽然我们用递归的方式分析动态规划的问题,但都会基于循环去编码。

GreatestSumOfSubArray
 1 bool g_InvalidInput = false;
 2 
 3 int FindGreatestSumOfSubArray(int *pData, int nLength)
 4 {
 5     if((pData == NULL) || (nLength <= 0))
 6     {
 7         g_InvalidInput = true;
 8         return 0;
 9     }
10 
11     g_InvalidInput = false;
12 
13     int nCurSum = 0;
14     int nGreatestSum = 0x80000000;
15     for(int i = 0; i < nLength; ++i)
16     {
17         if(nCurSum <= 0)
18             nCurSum = pData[i];
19         else
20             nCurSum += pData[i];
21 
22         if(nCurSum > nGreatestSum)
23             nGreatestSum = nCurSum;
24     }
25 
26     return nGreatestSum;
27 } 

 2、思路:

  最优解包含两种情况:一种是没有跨过a[n-1]到a[0],即第一种解法;另一种是跨过a[n-1]到a[0]的,采取的方法先求原数组的最小数列,再用全部元素的和减去最小数列,即为最大和。

FindMaxSumCircle
 1 //环形数组求最大子数组的和
 2 int MaxSum(int *a , int n)
 3 {
 4     int i , sum , max1 , max2 , dp, min;
 5     dp = max1 = a[0];
 6     for(i = 1 ; i < n ; ++i)   //最优解没有跨过a[n-1]到a[0],即原问题,非环形数组
 7     {
 8         if(dp < 0)
 9             dp = a[i];
10         else
11             dp += a[i];
12         if(dp > max1)
13             max1 = dp;
14     }
15     sum = min = dp = a[0];
16     for(i = 1 ; i < n ; ++i)   //可以将原问题转化为数组的最小子段和问题,再用数组全部元素的和减去最小子段和,那么结果一定是跨过a[n-1]到a[0]情况中最大的子段和
17     {
18         if(dp > 0)
19             dp = a[i];
20         else
21             dp += a[i];
22         if(dp < min)
23             min = dp;
24         sum += a[i];
25     }
26     max2 = sum - min;    //数组全部元素的和减去最小子段和
27     return max1 > max2 ? max1 : max2;;     //返回一个较大值
28 }

 3、思路:

  转化为求解子数组最大和的问题。a1-a4=(a1-a2)+(a2-a3)+(a3-a4)。

 1 int MaxDiff_Solution2(int numbers[], unsigned length)
 2 {
 3     if(numbers == NULL || length < 2)
 4         return 0;
 5  
 6     int* diff = new int[length - 1];
 7     for(int i = 1; i < length; ++i)
 8         diff[i - 1] = numbers[i - 1] - numbers[i];
 9  
10     int currentSum = 0;
11     int greatestSum = 0x80000000;
12     for(int i = 0; i < length - 1; ++i)
13     {
14         if(currentSum <= 0)
15             currentSum = diff[i];
16         else
17             currentSum += diff[i];
18  
19         if(currentSum > greatestSum)
20             greatestSum = currentSum;
21     }
22  
23     delete[] diff;
24  
25     return greatestSum;
26 } 
MaxDiff

  另外一种动态规划的解法,传送门:http://zhedahht.blog.163.com/blog/static/2541117420116135376632/

转载于:https://www.cnblogs.com/wangpengjie/archive/2013/03/23/2976783.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF中设置了WindowStyle=None后,窗口仍然有边框的解决方法

1. 设置了窗体的WindowStyle"None",窗口还是右边框&#xff0c;如下图&#xff1a; 2. 这是因为窗体默认是可以改变大小的&#xff0c;所以需要修改ResizeMode的值 ResizeMode"NoResize", 这样设置后&#xff0c;上图中的边框就没有了

两度破译“白宫密码”,让美国政府部门崩溃,却称自己是抱娃敲代码的普通妈妈

全世界只有3.14 % 的人关注了爆炸吧知识抱娃敲代码称成功是幸运而已今天我们来点正经的&#xff0c;来跟大家分享一位乘风破浪的姐姐--王小云教授。自踏入2020年以来&#xff0c;山东大学网络空间安全学院&#xff08;研究院&#xff09;院长&#xff0c;双聘院士、讲席教授王小…

github java开源项目经验_10月份Github上最热门的Java开源项目

10 月份 GitHub 上最热门的Java开源项目排行已经出炉啦&#xff0c;在本月的名单中&#xff0c;实战项目类居多&#xff0c;当然也有像JavaGuide这样学习指南类项目&#xff0c;下面就是本月上榜的10个开源项目&#xff1a;1、Java&#xff08;Star 18468&#xff09;https://g…

浙江移动无线dns服务器地址,浙江移动4g的dns服务器地址

浙江移动4g的dns服务器地址 内容精选换一换当创建文件系统后&#xff0c;您需要使用云服务器来挂载该文件系统&#xff0c;以实现多个云服务器共享使用文件系统的目的。本章节以Windows 2012版本操作系统为例进行NFS文件系统挂载&#xff0c;其他版本请参考以下主要步骤根据实际…

Android之给gridview的单元格加上分割线

有时候需要给gridview加上分割线&#xff0c;没有现成的解决方案&#xff0c;这里写好一个可以直接用的自定义gridview&#xff0c;就叫做LineGridView吧。先上图&#xff0c;zaker客户端第三方分享的gridview样式&#xff1a; 可以看到靠边的格子都是半封闭的&#xff0c;要实…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理…

系统命名与 SQL 命名之争 - 第 1 部分

创建数据库对象的命名规范 创建数据库对象时&#xff0c;开发人员可以选择一种命名方法&#xff0c;可以选择遵循传统 IBM i 行为的系统命名模式 (*SYS)&#xff0c;也可以选择遵循SQL 标准规则的 SQL 命名规范 (*SQL)。 DB2 for i 与其他数据库管理系统 (DBMS) 之间的主要差别…

C++ const 关键字使用

2019独角兽企业重金招聘Python工程师标准>>> 为什么使用const&#xff1f;采用符号常量写出的代码更容易维护&#xff1b;指针常常是边读边移动&#xff0c;而不是边写边移动&#xff1b;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号…

论大象如何装进冰箱

全世界只有3.14 % 的人关注了爆炸吧知识在这美好的一天&#xff0c;想和大家讨论一个有趣的数学话题&#xff1a;怎么才能将一只大象装进冰箱呢&#xff1f;数学的方法把大象放到冰箱里的分析学方法1&#xff09;先把大象微分&#xff0c;然后把它放到冰箱里&#xff0c;再在冰…

2020下半年新机最新消息_提前剧透 2020 年下半年五大新机

华为 Mate40系列 美帝一系列封杀骚操作&#xff0c;并没有影响到华为手机下一代的处理器——台积电代工的、采用了 5nm 进程的 Mate40 处理器——麒麟 1020。为了 3D 脸部识别&#xff0c;可能还是采用刘海屏。Mate40 Pro 的曲率更大&#xff0c;正面屏幕的视觉冲击更加震撼&am…

手把手教你学Dapr - 5. 状态管理

介绍使用状态管理&#xff0c;您的应用程序可以将数据作为键/值对存储在支持的状态存储中。您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来保存和读取键/值对&#xff0c;如下图所示。例如&#xff0c;通过使用 HTTP POST&#xff0c;您可以保存键/值对&#xf…

Android之drawlayout使用和总结

DrawLayout 今天发的Android之SlidingMenu博客之后,有人说out了,说用DrawLayout,我插,被叼了,然后我就到网上查drawLayout是什么?原来是侧滑菜单,好吧,赶快学习下,网上很多例子,都不怎么全面,然后找了找了呀,终于找到到了个成形的,然后自己改了下,不说了,先爆照 …

eclipse 汉化教程(语言包)

Eclipse 汉化图形教程此教程仅仅以links方式安装eclipse插件&#xff0c;且接下来主要以eclipse安装语言包为例&#xff0c;如果教程过程中哪里不对&#xff0c;请指出&#xff0c;谢谢。因使Eclipse版本太多&#xff0c;我这里就以eclipse3.5.2为例&#xff0c;讲讲如何将其汉…

4. MyBatis几个可以优化的地方

与其说是优化, 还不如说是让配置更简单.一: 连接数据库的配置单独放到一个属性文件中在 src 路径下新建一个 db.properties 属性文件, 并把数据库连接信息放入文件中, 然后在 conf.xml 文件中导入属性文件引用就可以了, 这样更好管理.1. 新建 db.properties 文件2. 写入属性信息…

免费使用的支付宝,到底是怎么一年赚1206亿的?

全世界只有3.14 % 的人关注了爆炸吧知识眨眼间&#xff0c;马云居然退休已经一年了&#xff0c;真可谓白驹过隙&#xff0c;恍惚而逝啊&#xff01;不过&#xff0c;你以为马云退休了&#xff0c;就清风明月&#xff0c;万事不管了。太年轻&#xff01;其实马云依旧掌控者蚂蚁集…

C#中使用opencv处理图像

OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android、ios等操作系统上&#xff0c;它轻量级而且高效---由一系列C函数和少量C类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接口…

php psr 编码规范_PHP之PSR-4规范:自动加载

1. 概述本 PSR 是关于由文件路径 自动载入 对应类的相关规范&#xff0c;本规范是可互操作的&#xff0c;可以作为任一自动载入规范的补充&#xff0c;其中包括 PSR-0&#xff0c;此外&#xff0c;本 PSR 还包括自动载入的类对应的文件存放路径规范。关于「能愿动词」的使用为了…

两台服务器虚拟成一个ip地址,两台服务器如何用一个ip地址

两台服务器如何用一个ip地址 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。检查Pkey是否一致。查看弹性云服务器内部分配到的Pkey…

SQL注入漏洞全接触--高级篇

2019独角兽企业重金招聘Python工程师标准>>> 看完入门篇和进阶篇后&#xff0c;稍加练习&#xff0c;破解一般的网站是没问题了。但如果碰到表名列名猜不到&#xff0c;或程序作者过滤了一些特殊字符&#xff0c;怎么提高注入的成功率?怎么样提高猜解效率?请大家接…

除了沉迷酒色之外,你还做过什么?

1 是了&#xff0c;说的就是我▼2 你这叫落井又下石...▼3 如何让衣服瞬间好看&#xff1f;▼4 自己品品...▼5 买家秀与卖家秀▼6 舍友的水杯...妥妥养生局&#xff01;▼7 还有...▼你点的每个赞&#xff0c;我都认真当成了喜欢