• 数组问题


    (一)一维最大连续子数组和

    源码:

    #include<iostream> 

    #include<cstdio>

    using namespace std;

    const int N=100000;

    int main() {

    int i,j,k;

    int a[N];

    int sum[N];

    int n;

    printf("请输入数组个数: ");

    cin>>n;

    for(i=1;i<=n;i++)

    cin>>a[i];

    sum[1]=a[1];

    int maxn=sum[1];

    for(i=2;i<=n;i++) {

    if(sum[i-1]>0)

    sum[i]=a[i]+sum[i-1];

    else sum[i]=a[i];

    maxn=max(maxn,sum[i]);

    }

    cout<<maxn<<endl;

    return 0;

    }

    (二)环状数组求最大连续子数组和

    #include<iostream>

    #include<cstring>using namespace std;int n;int NotCircle(int a[])

    {

        int maxn=-1000;

        int sum[10000];

        sum[0]=a[0];

        for(int i=1;i<n;i++)

        {

            if(a[i]<a[i]+sum[i-1])

            {

                sum[i]=a[i]+sum[i-1];

            }

            else

            {

                sum[i]=a[i];

            }

            if(maxn<sum[i])

                maxn=sum[i];

        }

        return maxn;

    }

    int findmin(int a[])

    {

        int minx=10000000;

        int sum[10000];

        int flag=0;

        sum[0]=a[0];

        for(int i=1;i<n;i++)

        {

            if(sum[i-1]<0)

                sum[i]=sum[i-1]+a[i];

            else

                sum[i]=a[i];

            if(minx>sum[i])

            {

                minx=sum[i];

                flag=i;

            }

        }

        return flag;

    }

    int Circle(int a[])

    {

          int minid=findmin(a);

          int key=(minid+1)%n;

          int j;

          int maxn=a[key];

          int sum=0;

          for(j=key;(j%n)!=minid;j++)

          {

              if(sum>0)

                sum+=a[j%n];

            else

                sum=a[j%n];

              if(maxn<sum)

                maxn=sum;

          }

          return maxn;

    }

    int main()

    {

        int a[100],i,j;

        cin>>n;

        for(i=0;i<n;i++)

            cin>>a[i];

        int ans1=NotCircle(a);

        int ans2=Circle(a);

        cout<<ans1<<" "<<ans2<<endl;

        int ans=max(ans1,ans2);

        cout<<ans;

        return 0;

    }

  • 相关阅读:
    JS 中的foreach和For in比较
    SQL 查询CET使用领悟
    .NET开源项目
    asp.net获取客户端IP方法(转载)
    jQuery Mobile 基础(第四章)
    jQuery Mobile 基础(第三章)
    jQuery Mobile 基础(第二章)
    机器学习笔记之梯度下降法
    特征脸是怎么提取的之主成分分析法PCA
    word2vec初探
  • 原文地址:https://www.cnblogs.com/2506236179zhw/p/13237958.html
Copyright © 2020-2023  润新知