最大子段和
时间:2022-04-22
本文章向大家介绍最大子段和,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最大子段和:给出一个数组,计算其中连续的最大的子段和
运行代码,及运行思想:
/**
* 动态规划:计算最大子段和
* 算法描述:
* 数组a 有n个元素, 记 s[i] 为从a【0】到a[i]中,包含a[i]的最大子段和
* 则: s[i] 的值为: s[i-1]>0时, s[i-1]+a[i]
* 否则 a[i]
*/
#include <stdio.h>
#include <stdlib.h>
int maxSub(int *a, int n)
{
int i=0, max=0, max_pos = 0;
int si_1=0, si = 0;//分别记录s[i-1], 和 s[i]的值
int *p = (int *)malloc(n*sizeof(int)); //p[i] 助于记录哪些单元被选择, p[i]=1 表示s[i]计算的结果中中使用了s[i-1]的值
if (p==NULL)
return -1;
max = si_1 = a[0];
p[0] = 0;
for (i=1; i<n; i++)
{
if (si_1<0)
{
p[i] = 0;
si = a[i];
}
else
{
p[i] = 1;
si = si_1+a[i];
}
si_1 = si;
if (si>max)
{
max = si;
max_pos = i;
}
}
//找到最大子段和的位置
for (i=max_pos; i>=0; i--)
if (p[i]==0)
break;
//即i..max_pos为最大子段和的元素
printf("%d--%d:%dn", i, max_pos, max);
free(p);
p = NULL;
return max;
}
int main()
{
int n = 10;
int a[10] = {3, 5, 6, 10, -2, -5, 3, 5, -112, -324};
maxSub(a, n);
return 0;
}
源代码摘自:http://blog.csdn.net/chaoyue1216/article/details/6870339
运行结果:
- 【Go 语言社区】关于select和channel数组的配合使用--转
- Java基础-day09-代码题-对象;类;封装
- MySQL replace into的使用细则(r10笔记第48天)
- Win10下用Anaconda安装TensorFlow
- 【Go 语言社区】跨域问题解决方案:jsonP客户端和服务器代码
- 图;代码轻松理解,代理
- 巧用闪回数据库来查看历史数据 (r10笔记第47天)
- 【Go 语言社区】Golang内存分配
- 小白也能懂的手写体识别
- 【Go 语言社区】浅析javascript的间隔调用和延时调用
- 说说JSON和JSONP,也许你会豁然开朗-转
- C++动态链接库
- Java基础-day11-接口;多态案例练习
- 记一次sql server 性能调优,查询从20秒至2秒
- 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 数组属性和方法
- Unrecognised tag: 'snapshotPolicy'
- spinrgboot缓存之缓存抽象(缓存初步体验)
- springboot之快速构建springboot应用
- NLP简报(Issue#4)
- LaTeX常用篇(一)---公式输入
- 几个Python“小伎俩”(续)
- Transformers Assemble(PART III)
- 【python-双指针】pair with target sum
- springboot开发之配置Servlet三大组件(Servlet、Filter、Listener)
- vuejs之v-html
- linux之解决使用VMWare安装centos7后无法联网问题
- c++之引用
- c++之函数的其它用法
- c++之函数重载
- c++面向对象之封装