【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 ...
随机推荐
- centos6.4、6.5、7.0环境下载及安装
centos6.4.6.5.7.0下载地址: http://www.cnblogs.com/zhwl/p/3657958.html或 http://www.linuxdown.net/CentOS/2 ...
- 我是这样使用template.js来异步渲染数据的
总监的代码用的是define+module.exports,为了效率先没去了解那一块,在github上找了一款功能单一的template.js来使用 https://github.com/yanhai ...
- 正则表达式之 match , findall, sub,subn
#正则表达式之 match以及分组 import re #无分组 origin = "hello alex bcd alex lge alex avd 19" r = re.mat ...
- Python网络编程学习_Day10
一.进程与线程 1.区别 进程:一个程序要运行时所需要的所有资源的集合,进程是资源的集合. 一个进程至少需要一个线程,这个线程称为主线程 一个进程里面可以有多个线程 两个进程之间的数据是完全独立,不能 ...
- HDU 5904 LCIS
$dp$. 这题的突破口在于要求数字是连续的. 可以分别记录两个串以某个数字为结尾的最长上升长度,然后枚举一下以哪个数字为结尾就可以得到答案了. 因为$case$有点多,不能每次$memset$,额外 ...
- vimtutor基础教程
第一讲: 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. 欲 ...
- RTMP直播应用与延时分析
直播应用中,RTMP和HLS基本上可以覆盖所有客户端观看,HLS主要是延时比较大,RTMP主要优势在于延时低. 一.应用场景 低延时应用场景包括: . 互动式直播:譬如2013年大行其道的美女主播 ...
- C#Winform实现自动更新
服务端: [WebMethod] public string GetNewService(string version) { //通过版本号进行比较 if (version == "v1.0 ...
- web service client端调用服务器接口
打开项目的web service client 其中wsdl URL http://www.51testing.com/html/55/67755-848510.html 去这里面查找一些公开的 ...
- Spring Security(17)——基于方法的权限控制
目录 1.1 intercept-methods定义方法权限控制 1.2 使用pointcut定义方法权限控制 1.3 使用注解定义方法权限控制 1.3.1 JSR-25 ...