数组问题

Posted 2506236179zhw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组问题相关的知识,希望对你有一定的参考价值。

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

源码:

#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;

}

以上是关于数组问题的主要内容,如果未能解决你的问题,请参考以下文章

java数组问题

PHP中多维数组的问题

算法题|-分治法解决最大子数组问题

JAVA数组打印输出问题。

将字节数组转换为字符串并返回字节数组的问题

关于三维数组转换2维数组的问题