zoukankan      html  css  js  c++  java
  • 数组中子序列最大和算法

    昨天有同事去别的公司面试,考了这样一道题,说写得不好,问能不能有时间复杂度为数组长度的算法,这个应该不难,写了段代码,执行上应该没错。

    int main(int argc, char* argv[])
    {
    int a[]={10,3,-5,16,90,-100,90,6,-7};
    int n =sizeof(a)/sizeof(int);
    int max = 0;
    int tmpmax = 0;
    for(int i=0;i<n;i++)
    {
    if(tmpmax+a[i]>max)
    {
    tmpmax = max = tmpmax+a[i];
    }
    else
    {
    tmpmax = tmpmax+a[i];
    if(tmpmax<0)
    tmpmax = 0;
    }
    }
    cout<<"MaxValue: "<<max<<endl;
    return 0;
     
    }
    嘿嘿,谁能看出那个数组中和最大的子序列是什么??

     应该是最简单的算法了,在网上搜了下,好些人写得有问题,误人子弟啊。

    上面是没有考虑全负的情况,修正如下:

        int a[]={-10,3,9,-16,-90,-100,-90,6,-7};
        int n =sizeof(a)/sizeof(int);

        int max = a[0];
        int tmpmax = 0;

        for(int i=0;i<n;i++)
        {
            if((tmpmax=tmpmax+a[i])>max)
            {
                max = tmpmax;
            }
            else
            {
                if(tmpmax<0)
                {
                    if(max<0)
                        if(a[i]>max)
                            max = a[i];
                    else
                        tmpmax = 0;
                }
                    
            }
        }

        cout<<"MaxValue: "<<max<<endl;
    如果全负实际是做了一遍选择排序。



  • 相关阅读:
    将1、2、3..10...变成01、02、03...10...
    idea启动项目时报错
    八锁现象
    友联
    通达OA 任意文件删除结合文件上传导致RCE漏洞复现
    Linux提权
    vulnhub靶机DC2记录
    ThinkPHP5.x 任意代码执行漏洞复现
    SaltStack远程命令执行漏洞复现(CVE-2020-11651、CVE-2020-11652)
    vulnhub靶机DC1记录
  • 原文地址:https://www.cnblogs.com/freemobile/p/1987953.html
Copyright © 2011-2022 走看看