Python语言描述连续子数组的最大和


Posted in Python onJanuary 04, 2018

题目描述

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)

思路:

最大和连续子数组一定有如下几个特点:

1、第一个不为负数

2、如果前面数的累加值加上当前数后的值会比当前数小,说明累计值对整体和是有害的;如果前面数的累加值加上当前数后的值比当前数大或者等于,则说明累计值对整体和是有益的。

步骤:

1、定义两个变量,一个用来存储之前的累加值,一个用来存储当前的最大和。遍历数组中的每个元素,假设遍历到第i个数时:

①如果前面的累加值为负数或者等于0,那对累加值清0重新累加,把当前的第i个数的值赋给累加值。

②如果前面的累加值为整数,那么继续累加,即之前的累加值加上当前第i个数的值作为新的累加值。

2、判断累加值是否大于最大值:如果大于最大值,则最大和更新;否则,继续保留之前的最大和

# -*- coding: utf-8 -*- 
""" 
Date: Thu Nov 02 11:00:40 2017 
 
Created by @author: xiaoguibao 
 
E-mail: mingliumengshao@163.com 
 
连续子数组的最大和 
Content: 输入一个整形数组,有正数和负数,数组中的一个或连续多 
个整数组成一个子数组,O(n)时间求所有子数组的和的最大值。 
 
""" 
 
def function(lists): 
  max_sum = lists[0] 
  pre_sum = 0 
  for i in lists: 
    if pre_sum < 0: 
      pre_sum = i 
    else: 
      pre_sum += i 
    if pre_sum > max_sum: 
      max_sum = pre_sum 
  return max_sum 
 
def main(): 
  lists=[6,-3,1,-2,7,-15,1,2,2] 
  print function(lists) 
   
if __name__ == "__main__": 
  main()

总结

以上就是本文关于Python语言描述连续子数组的最大和的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python装饰器使用示例及实际应用例子
Mar 06 Python
Python下线程之间的共享和释放示例
May 04 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
详细分析Python垃圾回收机制
Jul 01 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
Python unittest装饰器实现原理及代码
Sep 08 Python
python os.listdir()乱码解决方案
Jan 31 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
Jan 03 #Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 #Python
python编程实现随机生成多个椭圆实例代码
Jan 03 #Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 #Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 #Python
Python简单实现socket信息发送与监听功能示例
Jan 03 #Python
python实现Floyd算法
Jan 03 #Python
You might like
如何将数据从文本导入到mysql
2006/10/09 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
JSONP基础知识详解
2017/03/19 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python 多个参数不为空校验方法
2019/02/14 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
承认错误的检讨书
2014/01/30 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
Python jiaba库的使用详解
2021/11/23 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
MySQL创建管理LIST分区
2022/04/13 MySQL