1 条题解

  • 2
    @ 2024-3-7 14:42:32

    稍微修改一下课上第一道OJ的代码就好了~注意这里要求的是同一个包裹中每种雪花最多有2片。小修改flag的改变条件。如果右指针对应雪花片数大于2,此时包裹不再满足条件,flag设置为0,然后尝试移动左指针。如果左指针对应雪花片数重新变为2,所以包裹重新满足条件,flag设置为1。

    参考代码
    
    #include<iostream>
    #include<cstring>
    using namespace std;
    int n, t, a[1000005];
    int cnt[1000005];
    int main()
    {
        cin >> t;
        while (t--)
        {
            int l = 1, r = 1, ans = -0x3f3f3f3f;
            bool flag = 1;
            memset(cnt, 0, sizeof(cnt));
            cin >> n;
            for (int i = 1; i <= n; i++)
                cin >> a[i];
            cnt[a[1]] = 1;
            while (l <= r && r <= n)
            {
                if (flag == 1)
                {
                    ans = max(ans, r - l + 1);
                    r++;
                    cnt[a[r]]++;
                    if (cnt[a[r]] > 2)
                        flag = 0;
                }
                else
                {
                    cnt[a[l]]--;
                    if (cnt[a[l]] == 2)
                        flag = 1;
                    l++;
                }
            }
            cout << ans << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    685
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    (无)
    递交数
    57
    已通过
    44
    上传者