zoukankan      html  css  js  c++  java
  • 最大连续子段和

    给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。
    例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。

    输入样例:
    7
    1 2 3 -5 0 7 8
    输出样例:
    16 7

    这题很简单 上AC代码 提示都在代码里面了

    #include <iostream>
    using namespace std; 
    int a[101];
    int n, i, ans, len, tmp, beg;
    int main()
    {
        cin >> n;
        for (i = 1; i <= n; i++)
            cin >> a[i];  
        tmp = 0;
        ans = 0;
        len = 0;
        beg = 0;  //为了便于后续统计元素个数,初始值为0
        for (i = 1; i <= n; i++)
        {
            if (tmp + a[i] > ans)
            {
                ans = tmp + a[i];
                len = i - beg;
            }
            //如果加上第 i 元素的当前子数列之和等于之前找到的最大元素之和
            //且当前子数列元素个数大于之前找到的元素个数
            else if (tmp + a[i] == ans && i - beg > len) 
                len = i - beg;
            
            if (tmp + a[i] < 0) //如果元素之和小于0,舍弃这个连续子数列
            {
                beg = 1; //记录下标 i 
                tmp = 0;
            }
            else  //否则当前连续子数列继续统计元素之和
            {
                tmp=tmp+a[i];
            }
        }
        cout << ans << " " << len << endl;
        return 0;
    }

    Copyright 2020 © IamXuWu All rights reserved.

  • 相关阅读:
    About IL, ILGenerator
    何谓系统架构师(转)
    C# weakreference
    新蛋,您能告诉我,这是怎么了吗?
    C#线程同步的常用关键字简介
    [转]百万级访问网站前期的技术准备
    Gridview控件的使用要点
    Asp.net三种页面传值方法
    浅谈 Vue css scoped & module
    Mac iTerm2 zsh: command not found: node/npm/nvm...
  • 原文地址:https://www.cnblogs.com/iamxuwu/p/13658472.html
Copyright © 2011-2022 走看看