• 数组问题(二)求环形数组子数组和的最大值


      这个问题相对于上个问题又复杂了一步,主要在于如何判断 最大子数组和是否在数组首尾处,那么可以选择分情况讨论,最后选择最大值解决

      可以分两个情况:


      1.和最大子数组没有跨过数组首尾

       此时可以使用上一个程序的方法


      2.和最大子数组跨过数组首尾

       此时选择 数组总和-最小子数组和得到最大子数组和


      最后通过比较两个和的大小选择实际和大小.

      程序代码:

    //可以分两个情况
    //1.和最大子数组没有跨过数组首尾
    //    此时可以使用上一个程序的方法
    //2.和最大子数组跨过数组首尾
    //    此时选择 数组总和-最小子数组和得到最大子数组和
    //最后通过比较两个和的大小选择实际和大小
    
    #include<iostream>
    using namespace std;
    int main()
    {
        int i,num,Max2Sum,result;
        cout << "请输入数组元素个数: " ;
        cin >> num;
        int *arr = new int[num];
        cout << "请依次输入数组元素" << endl;
        for (i = 0; i < num; i++)
        {
            cin >> arr[i];
        }
        int Sum=0;
        int temp=0 ;
        int CurSum=0;
        int MaxSum=0;
        int MinSum=0;
        for (i = 0; i<num; i++)
        {
            //第二种情况,求得最大值为Sum-MinSum
            Sum+=arr[i];
            if (temp>0)
            {
                temp=arr[i];
            }
            else
            {
                temp=temp+arr[i];
            }
            if (temp<MinSum)
            {
                MinSum=temp;
            }
            //第一种情况,求得最大值为CurSum
            CurSum+=arr[i];
            if(CurSum>MaxSum)
            {
                MaxSum=CurSum;
            }
            if(CurSum<0)
            {
                CurSum=0;
            }
        }
        Max2Sum=Sum-MinSum;
        if(CurSum>Max2Sum)  //较大的为最大值
        {
            result=CurSum;
        }
        else
        {
            result=Max2Sum;
        }
        cout <<"该数组中最大子数组的和是: "<< result<<endl;
        system("pause");
        return 0;
    }

      程序运行截图(对比上一次程序):

      另一个实验数据:

  • 相关阅读:
    [慢查优化]建索引时注意字段选择性 & 范围查询注意组合索引的字段顺序
    telnet报“Unable to connect to remote host:Connection refused”错误
    问题总结-2016
    vim保存文件时,生成.un~文件
    用uniq来处理文件重复数据--交集,差集,计数等(转)
    ThinkPHP的URL访问
    PHP中Exception异常
    Git Stash紧急处理问题,需要切分支
    git 命令学习
    gdb调试PHP扩展错误
  • 原文地址:https://www.cnblogs.com/zzcs/p/5326221.html
Copyright © 2020-2023  润新知