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

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

  • 相关阅读:
    csps模拟测试70
    模拟测试66反思
    csps63总结
    csps60爆零记
    csps模拟测试57
    模拟测试52,53反思
    LOJ2542「PKUWC2018」随机游走
    LOJ6300 BZOJ5283 [CodePlus 2018 3 月赛]博弈论与概率统计
    2019暑假集训
    省队二轮集训笔记
  • 原文地址:https://www.cnblogs.com/stfly/p/9904125.html
Copyright © 2011-2022 走看看