求最大连续序列和的一个巧妙方法,时间复杂度O(n)

 1 # include<iostream>
 2 using namespace std;
 3 long long  a[1000000];
 4 long long b[1000000];  //b[i]表示数列前i+1个数的最大连续序列和
 5 int main(){
 6     long long  n=0,i=0;
 7     while(cin>>n){
 8         for(i=0;i<n;i++)
 9             cin>>a[i];
10         b[0]=a[0];
11         long long  ma=a[0];
12         for(i=1;i<n;i++)
13         {
14             b[i]=max(b[i-1]+a[i],a[i]);
15             if(ma<b[i]) ma=b[i];
16         }
17         cout<<ma<<endl;
18     }
19     return 0;
20 }
时间: 2024-10-10 15:30:10

求最大连续序列和的一个巧妙方法,时间复杂度O(n)的相关文章

算法题:找出一个数组中相加值最大的连续序列元素

package arithmetic; /** * @author SHI * 求一个数组中相加值最大的连续序列元素 */ public class MaxSequence { public static void main(String[] args) { int[] a=new int[]{-2,9,-3,4,-6,7,-6,4}; findBigSequence(a); } /** * 思想: (1)计算出该数组的所有元素和,假设该值为最大 * (2)从数组下标1到a.length-1依次

阿里笔试题:求两个子序列的最大连续子序列

原题例如以下: 给定一个query和一个text,均由小写字母组成.要求在text中找出以相同的顺序连续出如今query中的最长连续字母序列的长度.比如.query为 "acbac",text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此.返回结果应该为其长度3.请注意程序效率. 解题方法一: 和字符串匹配一样(http://blog.csdn.net/sinat_24520925/articl

[LeetCode] Longest Consecutive Sequence 求最长连续序列

Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4. Your algorithm should run i

HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解

目录 题意: 解析 原题描述 @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\)和\(b[]\)随机排列,可以得到\(c[i]=a[i]\)^\(b[i]\),求字典序最小的\(c[]\). 解析 一个显然对的贪心做法: 针对本题 每次两颗字典树同时往下走,如果都有\(0\)或者\(1\)这条路径,就随便同时走\(0\;or\;1\)这条路径,否则只能一个走\(0\),一个走\(1\).这样复杂

java求字符串中连续的数字为一个整体并返会连续的数字和共有多少个整数

public static void main(String[] args) { String strNumbers = "0123456789";//用来进行判断数字的 System.out.println("请输入一个字符串:"); String string = new Scanner(System.in).next(); //自定义输入 String[] strings = new String[string.length()];//自定义是字符串 Syst

多种方法求最大连续和

最大连续和的定义:给出一个长度为n的序列A1,A2,...,An,求最大连续和,即找要求找到1<=i<=j<=n,使得Ai+Ai+1+..+Aj最大. 方法一,根据定义容易想到: int maxSubSeqSum(int A[],int N) { int maxSum=A[0]; int i,j,k; for(i=2;i<N;i++) for(j=i;j<N;j++) { int sum=0; for(k=i;k<=j;k++) { sum+=A[k]; } if(su

【6】连续序列和为s

题目:输入一个整数s,打印出全部和为s的连续整数序列(至少含有2个数).比如输入9,则输出2.3.4和4.5两个序列 方案一:因为序列至少要2个数,则两个数上限值为(1+s)/2,我们能够枚举该序列的起点和终点求全部满足的序列.时间复杂度为O(n^2),效率比較低 方案二:我们设置两个指针start和end分别表示当前序列的起点和终点,并记序列和为sum.当sum = s的时候输出这个序列,而且end往后移动一位:假设sum > s,则start往后移动一位:假设sum < s,则end要往后

连续序列和为s

题目:输入一个整数s,打印出所有和为s的连续整数序列(至少含有2个数).例如输入9,则输出2.3.4和4.5两个序列 方案一:由于序列至少要2个数,则两个数上限值为(1+s)/2,我们可以枚举该序列的起点和终点求所有满足的序列.时间复杂度为O(n^2),效率比较低 方案二:我们设置两个指针start和end分别表示当前序列的起点和终点,并记序列和为sum.当sum = s的时候输出这个序列,并且end往后移动一位:如果sum > s,则start往后移动一位:如果sum < s,则end要往后

从O(n^3) 到 O(n)求最大连续和

最大连续和问题:给出一个长度为n的序列A1, A2, A3,······ An,求最大连续和.或者这样理解:要求找到1≤i≤j≤n,使得Ai+ Ai+1 + ······ +Aj尽量大. [分析] 这时候最容易想到的就是暴力枚举了,,, 代码如下: 1 for(int i=1; i<=n; i++) { 2 for(int j=i; j<=n; j++) { 3 int sum = 0; 4 for(int k=i; k<=j; k++) 5 sum += val[k]; 6 //Max