题目:有一排n个整数,a1,a2,a3,......(1<=n<=1e6)(1e-9<=ai<=1e9)。求最大的非空字段和。

这道题是非空字段和,如果直接利用上一篇博客中讲的最大子段和的代码,其结果是错的。

因为当这个数组全为负数时,根据那个代码,求出最后的结果是0,相当于是空子段。

本题应设置,ans为足够小的负数,当数组全为负数时,最后的结果就是数组中最大的值,如果不是全负数,就还是最大字段和的思路。代码如下:

#include<iostream>
using namespace std;
int main(){long long n;cin >> n;long long  a[n];for(int i=1;i<=n;i++){cin >> a[i];}
long long  ans=-10000000000;long long sum=0;for(int i=1;i<=n;i++){if(ans<0&&a[i]<0){//此时全为负数的情况ans=max(ans,a[i]);}if(a[i]>0&&ans<0){//在前边全为负数的情况下,突然搜到了正数。sum+=a[i];ans=sum;}if(ans>0){//这点注意条件的判断sum+=a[i];ans=max(sum,ans);}if(sum<0){sum=0;}}cout << ans;return 0;
}

上面的代码时自己写的,感觉想的时候有点绕,代码不够清晰。

以下的代码是别的博主的,思路大同小异,但是代码的可读性比上面的强。

#include<bits/stdc++.h>
using namespace std;
#define MAX 1000005
#define NIL 1e9
typedef long long LL;
LL a[MAX];
int main()
{LL n,sum = 0,ans = -NIL;cin >> n;for(int i = 0;i < n;i++) cin >> a[i];for(int i = 0;i < n;i++) ans = max(ans,a[i]); //找寻最大的那个数 if(ans < 0) cout << ans << endl;  //如果最大的数都<0,那么肯定越加越小,直接输出最大的那个数。 else{    for(int i = 0;i < n;i++){sum += a[i];if(sum < 0) sum = 0;   //加到这个数已经<0了,还不如不加前面的数,从这个数之和开始加 ans = max(ans,sum);  //挑选最大字段和 } cout << ans << endl;}return 0;
}

动态规划之最大非空子段和相关推荐

  1. ASP.NET中 RequiredFieldValidator(非空验证)的使用

    ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用 ASP.NET中 RequiredFieldValidator(非 ...

  2. oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据

     oracle sql 判断字段非空,数据不重复 select distinct(mobile) from wx_user_mobile where active_time is not null ...

  3. 还在用if(obj!=null)做非空判断?带你快速上手Optional实战性理解!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1.前言 相信不少小伙伴已经被java的NPE(Null ...

  4. SpringBoot基于AOP实现自定义非空验证的注解

    为了避免对大量参数进行过多的非空校验,我们可以自定义一个非空验证的注解,因为spring自带的@RequestParam并不能对参数进行非空 准备工作 首先需要创建一个spring boot项目,并引 ...

  5. Kotlin如何避免“!!”(非空断言)

    当我们把Java自动转成Kotlin的时候,代码里会出现很多非空断言!!.或者某些场景下因为IDE提示或编译错误,也让我们自己加上了一些!!. 但使用!!的后果是有可能抛出IllegalArgumen ...

  6. Linux 删除文件夹和文件的命令(强制删除包括非空文件)

    linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可. 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r ...

  7. Android非空格式验证框架Validation的使用---第三方库学习笔记(四)

    Validation简介: 这是一个简单的函数库,使用注释语法来验证用户输入的表单信息.你仅需编写几行代码就可以实现一些表单验证功能,且显示的所有视图都将反馈给用户.它还带有一个可扩展的在线验证选项, ...

  8. Python 非空即真、列表生成式、三元表达式 day3

    一.非空即真: Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false 布尔型,False表示False,其他为True 整数和浮点数,0表示False,其他为 ...

  9. Oracle中验证非空的函数NVL(),NVL2()总结

    1.NVL()函数 NVL函数的格式如下: NVL(expr1,expr2) 含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值. 2 N ...

最新文章

  1. 面向对象深入:继承03——抽象类
  2. 【转载】2009年春晚节目单提前揭晓
  3. flex 换主轴后子元素占满_Flex布局
  4. [云炬python3玩转机器学习] 6-1什么是梯度下降法
  5. cognito_将Spring Boot应用程序与Amazon Cognito集成
  6. 我竟然混进了 Python 高级圈子!
  7. 初识EntityFramework6【转】
  8. 软件工程概论第十三周学习进度
  9. Silverlight Telerik控件学习:主题Theme切换
  10. 【渝粤教育】国家开放大学2019年春季 1250文论专题 参考试题
  11. hdu 4638 Group
  12. php设置input时间格式,input[type='date']自定义样式与日历校验功能
  13. 自动化测试简介及环境搭建
  14. 电脑计算机硬盘内存满了怎么清理,电脑磁盘空间怎么清理 电脑磁盘空间清理方法【详解】...
  15. FLY Windows XP Pro SP3 v3264 集成优化版 2.0
  16. 解决windows电脑蓝屏的方法
  17. Xshell、Xftp软件评估过期解决方案
  18. React Native-9.React Native Touchable组件详解
  19. 《北风网网友录制Silverlight入门系列视频教程》共23课时/更新完毕[压缩包]
  20. 蓝牙nrf52832的架构和开发

热门文章

  1. MATLAB 如何做16进制运算
  2. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖
  3. electron---windows客户端开发探索
  4. 游戏设计文档的功能及类型
  5. bash文件无法运行,提示没有那个文件或目录的解决方法
  6. 神经元的结构模型图片,神经元模型图片解析
  7. JS 网页设置横竖屏切换
  8. coolpad大神f2Android,酷派大神f2致命缺点和优点有什么【图文】
  9. 鸿蒙负责人王成录被曝已离职:华为技术元老,1998年哈工大博士毕业后加入
  10. VirtualBox快捷键