给定N个整数的序列,求函数的最大值

题目:给定N个整数的序列,求函数的最大值。

算法1:

int maxSubseqSum1(int A[],int N)
{
    int ThisSum,maxSum=0;
    int i,j,k;
    for(i=0;i<N;i++)//i是子列左端位置
    {
        for(j=i;i<N;j++)//j是子列右端位置
        {
            ThisSum=0;//ThisSum是从A[i]到A[j]的子列和
            for(k=i;k<=j;k++)
                ThisSum+=A[k];
            if(ThisSum>MaxSum)//如果刚得到的这个子列和更大
                MaxSum=ThisSum;//则更新结果
        }//j循环结束
    }//i循环结束
    return MaxSum;
}

时间复杂度:T(N)=O(N3

算法2:

int maxSubseqSum2(int A[],int N)
{
    int ThisSum,maxSum=0;
    int i,j;
    for(i=0;i<N;i++)//i是子列左端位置
    {
        ThisSum=0;//ThisSum是从A[i]到A[j]的子列和
        for(j=i;i<N;j++)//j是子列右端位置
        {
                ThisSum+=A[j];
                //对于相同的i,不同的j,只要在j-1次循环的基础上累加1即可
            if(ThisSum>MaxSum)//如果刚得到的这个子列和更大
                MaxSum=ThisSum;//则更新结果
        }//j循环结束
    }//i循环结束
    return MaxSum;
}

时间复杂度T(N)=O(N2

算法3:

int MaxSubseqSum3(int A[],int N)
{
    int ThisSum,MaxSum;
    int i=0;
    ThisSum=MaxSum=0;
    for(i=0;i<N;i++)
    {
        ThisSum+=A[i];//向右累加
        if(ThisSum>maxSum)
        {
            maxSum=ThisSum;//发现更大和则更新当前结果
        }
        else if(ThisSum<0)//如果当前子列和为负
            ThisSum=0;//则不可能使后面的部分和增大,抛弃之
    }
    return MaxSum;
}

时间复杂度:T(N)=O(N);

“在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。

时间: 2024-11-16 05:53:27

给定N个整数的序列,求函数的最大值的相关文章

codevs:1462 素数和:给定2个整数a,b 求出它们之间(不含a,b)所有质数的和。

#include<iostream>#include<cstdio>#include<cmath>using namespace std;int main(){ int flag=0,a,b,tot=0; scanf("%d%d",&a,&b); if(a>b)swap(a,b); for(int i=a+1;i<b;++i) { flag=1; for(int j=2;j<=sqrt(i);++j) { if(i%

23、给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 1 class Solution { 2 public: 3     double Power(double base, int exponent) { 4         int p = abs(exponent); 5       double r = 1.0; 6         while(p){ 7             if(p != 0) r *= base; 8   

给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 &lt;把一个整数各个数位进行全排列&gt;

"""给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 -> 把一个整数各个数位进行全排列""" # 使用 permutations() 方法实现import itertools def full_arrangement(num): my_str = '' my_list = [] permutation = list(itertools.permutations(str(num), len(str(num)))) for

数据结构 -- 整数算术表达式求值 (C/C++)

数据结构题集(C语言版)--严蔚敏,吴伟民编著 设置运算符栈和运算数栈辅助分析运算符有限关系. 读入表达式的字符序列的同时完成运算符和运算数(整数)的识别处理,以及相应的运算. 在识别出运算数的同时,要将其字符序列形式转换成整数形式. 1 /** 2 Function:整数算术表达式求值 3 Date:2014-11-10 4 Author:JackDawson 5 Compiler:gcc version 4.8.1 6 */ 7 #include <iostream> 8 #include

PYTHON-常用的类型转换函数和序列常用函数有哪些?

一.类型转换函数 chr(i)chr()函数返回ASCII码对应的字符串.print chr(65) Aprint chr(66) Bprint chr(65)+chr(66) AB ord(x)ord()函数返回一个字符串参数的ASCII码或Unicode值.ord("a") 97ord(u"a") 97 hex(x)hex()函数可把整数转换成十六进制数.hex(16) '0x10'hex(123) '0x7b' oct(x)oct()函数可把给出的整数转换成八

hdu 5105 求函数极值 函数求导/三分法

http://acm.hdu.edu.cn/showproblem.php?pid=5105 给定a,b,c,d,l,r,表示有一个函数f(x)=|a?x3+b?x2+c?x+d|(L≤x≤R),求函数最大值. 考虑极点可能有0~2个.在极值点处函数的单调性会发生变化,所以最大值一定就在区间边界和极值点上.所以求下l,r,极值点的函数大小然后取最大的即可. #include <cstdio> #include <cstdlib> #include <cmath> #in

算法题:整数排成一排求最大值

算法题:整数排成一排求最大值 题目描述 [编程题]丈母娘的考验 题目ID:1136 [问题描述]小豪和女友恋爱数年,终于要修成正果了.今天,他将以准女婿的身份去女友家,唉呀,忐忑不安. 丈母娘一见小豪,嗯嗯,果然是传说中的高富帅,不错不错! 额额额,等会,这孩子不会是红漆马桶吧?长得好看,可是一肚子的粑粑o(^▽^)o,那可配不上我家宝贝乖乖女儿哦. "小豪,好孩子,能帮阿姨一个忙吗?老年大学有一道题,我还不会呢." 原来是这样的一道题:有三个正整数,将其连成一排,求最大的数. 例如,

28 python 序列的乘法(字符串乘法)检查某个值是否属于一个序列 求序列的长度、最大值和最小值

第四课:序列的乘法(字符串乘法) # 序列的乘法 # 序列和一个整数相乘 序列的乘法 可以达到 复制 整数份的字符串的效果 s = "a" print(s * 12) # aaaaaaaaaaaa numbers = [1,2,3,4,5] print(numbers * 3) # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] # 打印正三角 * 号的功能 ''' [' ', ' ', ' ', ' ', ' ', '*', ' ', '

二分求函数零点

二分法求函数的零点 总时间限制:  1000ms 内存限制:  65536kB 描述 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根. 输入 无. 输出 该方程在区间[1.5,2.4]中的根.要求四舍五入到小数点后6位. 样例输入 无 样例输出 不提供'四舍五入'[代码] 1 #in