【C++】最大子列和
此题来自《数据结构与算法》,书中一共介绍了四种方法,这里贴出两种。
1.分治递归,对本题来说,虽然有更好的算法,但是用此题理解分治算法感觉挺有用
#include <iostream>
int maxsublink(int *a,int right,int left);
using std::cout;
using std::cin; int main()
{
int a[]={,-,,-,-,,,-};
int maxnum=maxsublink(a,,);
cout<<maxnum;
return ;
}
int maxsublink(int *a,int left,int right)
{
int rightmax,leftmax;
int leftbordermax,rightbordermax;
int leftborder,rightborder; if(left==right)
{
if(a[left]>)
return a[left];
else
return ;
}
int mid,i;
mid=(right+left)/;
leftmax=maxsublink(a,left,mid);
rightmax=maxsublink(a,mid+,right);
leftborder=leftbordermax=;
for(i=mid;i>=left;i--)
{
leftborder+=a[i];
if(leftborder>leftbordermax)
leftbordermax=leftborder;
}
rightborder=rightbordermax=;
for(i=mid+;i<=right;i++)
{
rightborder+=a[i];
if(rightborder>rightbordermax)
rightbordermax=rightborder;
}
int intermax=leftbordermax+rightbordermax;
if(intermax>=rightmax)
{
if(intermax>=leftmax)
return intermax;
else
return leftmax;
}
else
{
if(rightmax>=leftmax)
return rightmax;
else
return leftmax;
}
}
2.遍历整个数组,每个遍历的值保存入thissum,当thissum<0时,thissum置零;当thissum>max时,更新max
这种方法时间复杂度可以达到O(n),感觉这种编程方法很值得学习,而且在别的算法中也经常用到,很典型。
#include <iostream> using namespace std;
int maxsublink(int *a,int num);
int main()
{
int a[]={,-,,-,-,,,-};
int maxnum=maxsublink(a,);
cout<<maxnum;
return ;
}
int maxsublink(int *a,int num)
{
int i,thissum,maxsum;
maxsum=thissum=;
for(i=;i<num;i++)
{
thissum+=a[i];
if(thissum>maxsum)
maxsum=thissum;
else if(thissum<)
thissum=;
}
return maxsum;
}
【C++】最大子列和的更多相关文章
- PAT复杂度_最大子列和问题、最大子列和变种
01-复杂度1. 最大子列和问题 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j ...
- 最大子列和CT 01-复杂度2 Maximum Subsequence Sum
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- 01-复杂度1 最大子列和问题(剑指offer和PAT)
01-复杂度1 最大子列和问题 (20分) 给定KK个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., N ...
- c++——最大子列和
最大子列和问题 //O(N^3) int MaxSubseqSum1(int A[],int N){ ; int i,j,k; ;i<N;i++){ for(j=i;j<N;j++) Th ...
- PAT A1007 Maximum Subsequence Sum (25 分)——最大子列和,动态规划
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- PATtest1.3:最大子列和
题目源于:https://pintia.cn/problem-sets/16/problems/663 题目要求:输入一个数列,求其最大子列和. 问题反馈:1.部分C++代码不是很熟练 2.没有仔细读 ...
- PTA 最大子列和问题(10 分)
最大子列和问题(10 分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1≤ ...
- PTA 01-复杂度1 最大子列和问题 (20分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/709 5-1 最大子列和问题 (20分) 给定KK个整数组成的序列{ N_1N1 ...
- 01-最大子列和问题(java)
问题描述:给定N个整数的序列{A1,A2,A3,…,An},求解子列和中最大的值. 这里我们给出{-2,11,-4,13,-5,-2}这样一个序列,正确的最大子列和为20 该题是在数据结构与算法中经常 ...
- Codeforces E. Weakness and Poorness(三分最大子列和)
题目描述: E. Weakness and Poorness time limit per test 2 seconds memory limit per test 256 megabytes inp ...
随机推荐
- Linux上传与下载(sz-rz)
linux使用rz和sz命令上传和下载文件! sz命令发送文件到本地: # sz filename rz命令本地上传文件到服务器: # rz 执行该命令后,在弹出框中选择要上传的文件即可. 说明:打开 ...
- mysql 5.5 mysqldump备份原理
开启general_log日志,获取mysqldump执行语句 show VARIABLES like 'general_log%' set GLOBAL general_log=on 执行备份命令 ...
- 使用node.js编写脚本将JSON数据转换为SQL语句
安装依赖模块 当node.js脚本在运行的时候,需要很多支持模块,这些模块存储在node_modules文件夹中.该脚本在执行过程中需要使用到fs.string-format两个支持模块,作用分别是: ...
- Nuget 学习一
初识Nuget 对应C#开发的人员来说, DLL和相关的引用 并不陌生吧,通过手动拷贝DLL 存在很多问题, 比如SOA的实体DLL,开发者和使用者的DLL不一致,就可能存在字段的不一致, 通过Nug ...
- Unity3d请求webservice
我们在对接第三方sdk时,第三方sdk通常会以一个webservice接口的形式供我们来调用.而这些接口会以提供我们get,post,soap等协议来进行访问.get,post方法相信大家都比较熟悉了 ...
- springmvc基础篇—掌握三种处理器
随着springmvc的广泛使用,关于它的很多实用有效的功能应该更多的被大家所熟知,下面就介绍一下springmvc的三种处理器: 一.BeanName处理器(默认) <?xml version ...
- CodeForces 675E Trains and Statistic
贪心,递推,线段树,$RMQ$. 假设我们记$ans[i]$是以$i$点为起点对答案的贡献,那么答案就是$\sum\limits_{i = 1}^n {ans[i]}$. $ans[i]$怎么计算呢? ...
- CSU 1803 2016
湖南省第十二届大学生计算机程序设计竞赛$A$题 枚举. 处理一下$\% 2016$之后的数分别有几个,然后$2016*2016$枚举一下统计方案数就可以了. #pragma comment(linke ...
- C#基础--属性
定义一个Book类: namespace ConsoleTest { public class Book { private string _bookIsbn; private string _boo ...
- NMON监控工具
工具可将服务器的系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工具nmonanalyser进行数据的统计分析.并且,nmon运行不会占用过多的系统资源,通常情况下CPU利用率 ...