求数组中连续子数组的最大值
来源:互联网 发布:centos修改dns 编辑:程序博客网 时间:2024/05/13 23:24
问题:
求解数组中连续一段子数组和的最大值。例如:{31,-41,59,26,-53,58,97,-93,-23,84},最大值为59+26-53+58+97=187
思路:
计算出任意i到j之间连续子数组的和再比较必然能得到最大值,但时间复杂度为O(n^2),我们希望能找出线性时间的算法。
我们注意到,假如数组中全为正数,那么最大和必然为全部数相加;如果数组中有负数,并且如果加上某个负数,子数组的和小于0,则最大和子数组必然不包含这个负数。 基于此,给出以下代码:
//计算数组中任何连续子数组的最大和#include <stdio.h>int getMaxValue(int data[],int length){ int max = 0,temp = 0; int i =0; for(i=0;i<length;i++) { temp = temp + data[i]; if(temp < 0) temp = 0; else { if(temp > max) max = temp; } } return max;}int main(){ int data[] = {31,-41,59,26,-53,58,97,-93,-23,84}; int length = sizeof(data) / sizeof(int); int max = getMaxValue(data,length); printf("%d",max);}
时间复杂度为o(n)
- 求数组中连续子数组的最大值
- 求数组的连续子数组之和的最大值
- 求连续子数组和的最大值的变种问题
- 每日一算法:求连续子数组和的最大值
- 求数组中连续子元素的最大值(动态规划)
- 求子数组的最大值
- 求子数组的最大值
- 求数组中,子数组合的最大值
- 求一个数组中序列连续数的最大值
- 求数组中任意连续位置元素和的最大值
- 求数组中最大连续子数组
- 求数组的子数组和最大值
- 求数组的子数组之和最大值
- 求数组子数组之和的最大值
- 求数组中连续子数组的最大和
- 求一个数组中连续子数组的最大和
- 求一个数组中连续子数组的最大乘积
- 求数组中最大连续子数组的和
- 合并commint
- 转:mfc 在ListCtrl控件的非第一列添加图标
- 使用Word对段落按照字母顺序进行排序
- 行为类设计模式
- seekBar采用handler消息处理操作
- 求数组中连续子数组的最大值
- 关于hibernate反向生成后,所对应非主键配置
- lightoj 1044 - Palindrome Partitioning
- 关于Android 中TextView字体设置的那点事
- rman异常案例二: 归档日志被人移动到其他目录,导致数据库恢复异常(续)
- <转>BufferedReader和FileReader读取txt文件乱码
- IT学生解惑真经(转)
- as3 加载外部XML
- <Win32_13>__win32控件(1)__教你玩美观的按钮控件