最大子数组问题
时间:2020-02-18
本文章向大家介绍最大子数组问题,主要包括最大子数组问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述
算法导论P38提到
来源:已知一股票在某一段时间内的变化趋势,问该时间段内何时买入,何时卖出,使得收益最大,求出最大值
转化:给定一个数组,从中选取一个连续的子数组,使得其元素和在所有的子数组中最大,返回该最大值。
解决方案
暴力搜索
n个元素中选取两个元素,计算两个元素之间的元素的和,将其与max相比,如果比max大,则替换;
代码如下:
|
|
分治策略
把一个数组从中分开为两个子数组,最大子数组可能的情况是:在左边的子数组,在右边的子数组,含左边的一部分和右边的一部分;对于前两种情况只是将原问题分解为较小的原问题,而第三种情况既然包括左边和右边,一定含有中间的元素,因此很好解决,从左从右遍历即可;然后将这三种情况进行比较,选取最大的部分返回
这个问题和归并排序是一个道理
|
|
DP解法
第sum[i-1]个元素是前i-1个元素的最大子数组的和,如果sum[i-1]小于0,则sum[i]=a[i],否则sum[i]=sum[i-1]+a[i];最后的结果result取sum[i]的最大值
sum[i]=max(a[i],sum[i-1]+a[i])
result=max(result,sum[i])
|
|
参考:
http://blog.csdn.net/v_JULY_v/article/details/6444021
原文地址:https://www.cnblogs.com/lijianming180/p/12326557.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一文带你网络安全 入门到入* [网络安全]
- 小白也能秒懂Vue源码中那些精细设计(选项处理)
- 软件品质评测系统-任务分发管理平台
- 彻底解决小程序无法触发SESSION问题
- 如何搭建前端异常监控系统
- JS+CSS 3实现图片滑块效果
- 深入理解 AuthenticationManagerBuilder 【源码篇】
- 每天一道前端面试题:如何进行网站性能优化
- PowerBI DAX 度量值管理 - 驾驭度量值依赖关系,删除无效
- Git 实用命令小抄
- 手把手教你画酷炫环形图(图文详解)
- 为什么说神经网络可以逼近任意函数?
- 缩放|位移|渐变简单动画
- HTTP状态码及其含义
- 卷积神经网络中的参数共享/权重复制