zoukankan      html  css  js  c++  java
  • 环形数组

    要求:

    1.输入一个整形数组,数组里有正数也有负数。

    2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    3.求所有子数组的和的最大值。

    思路:环形数组的求和可以把它当成一个一维整数数组,后面构建一个虚假的数列,加上限制条件。

    第一,最大子和的首位位置在1~n中,不能超出n。

    第二,最大和的长度不能超过n。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    #define N 200010
    int a[N],n;
    int main()
    {
    while(cin>>n)
    {
    for(int i=1;i<=n;i++)
    {
    cin>>a[i];
    a[n+i]=a[i];
    }
    int sum=0,head=1,cout=0,ans=0;
    int i=1;
    while(head<=n&&cout<=n)
    {
    if(sum<0)
    {
    sum=a[i];
    head=i;
    if(head>n) break;
    cout=1;
    }
    else
    {
    sum+=a[i];
    cout++;
    if(cout>n)
    {
    i=head;
    cout=0;
    sum=-0x3f3f3f;
    }
    }
    ans=max(ans,sum);
    i++;
    }
    printf("%d ",ans);
    }
    return 0;
    }

    总结:这次任务老师给了一定的提示,要注意的就是限制条件,总的来说还是很流畅的。

  • 相关阅读:
    动态网页技术--JSP(5)
    动态网页技术--JSP(4)
    动态网页技术--JSP(3)
    动态网页技术--JSP(2)
    动态网页技术--JSP(1)
    动态网页技术--Servlet
    TomCat服务器搭建
    06_多线程
    05_进程间通信 IPC
    04_进程池
  • 原文地址:https://www.cnblogs.com/stfly/p/9904125.html
Copyright © 2011-2022 走看看