zoukankan      html  css  js  c++  java
  • 一维数组最大子数组(二)

    一.题目要求

       返回一个整数数组中最大子数组的和。
     要求程序必须能处理1000 个元素;
       每个元素是int32 类型的;
       输入一个整形数组,数组里有正数也有负数。
     数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
     求所有子数组的和的最大值。

    二.代码

    #include<iostream>
    #include<ctime>
    #include<stdlib.h>
    #define N 100000
    using namespace std;
    void main()
    {
        long long begin;//子序列的开头
        long long end;//子序列的结尾
        long long newsum;//当前子序列最大值
        long long maxsum;//子序列最大值
        srand((unsigned)time(NULL));//生成随机数
        long long a[N], i, n;
        /*begin = 0;
        end = 0;*/
        newsum = 0;//初始化
        maxsum = a[0];//初始化
        cout << "请输入数组里面包含数的个数:" << endl;
        cin >> n;
        for (i = 0; i < n; i++)
        {
            a[i] = rand() % 21 - 10;
        }
        cout << "数组a[" << n << "]为:";
        for (i = 0; i < n; i++)
        {
            cout << a[i] << " ";
        }
        cout << endl;
     
        for (i = 0; i<n; i++)//开始循环求子序列和
        {
            newsum = newsum + a[i];
            if (newsum > maxsum)//更新当前子序列的和
            {
                maxsum = newsum;
                end = i;
            }
            if (newsum < 0)//假若当前子序列和为负,则舍弃
            {
                begin = i + 1;
                newsum = 0;
     
            }
        }
        cout << "最大的子序列和为:" << maxsum << endl;
        cout << "最大的序列为:";
        for (long long k = begin; k <= end; k++)
        {
            cout << a[k] << " ";
        }
        cout << endl;
     
    }

     

    思路:
    这是扫描法,从第一个开始记和开始到最后一个数,用maxsun记最大的和,但是有两个问题:1.在这个程序里计算子数组是错误的,比如到第五个数是最大的,但是加上第六个就是负数,那么子数组最开始就是改为第七个数开始;2.每个数都是在rand()%21-10之间,但不是任何一个数,整个的和没有超过int的范围,所以不存在溢出的问题,即没有真正解决溢出的问题。
     
  • 相关阅读:
    git push 小结
    在GitHub上创建代码仓库
    本人在CSDN上的技术博客访问量突破了10万次,特此截图留念
    和菜鸟一起学linux总线驱动之i2c死锁问题
    《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件
    Access text files using SQL statements by DB Query Analyzer
    git分享:Git_MinaPro
    git分享:Git_DataPro
    vimgrep 搜索总结
    HTML+CSS+JavaScript网页制作从新手到高手
  • 原文地址:https://www.cnblogs.com/hongyedeboke/p/4399835.html
Copyright © 2011-2022 走看看