双指针做法求调
查看原帖
双指针做法求调
671260
Nekomusume楼主2022/9/19 23:39
#include <iostream>
using namespace std;
int a[1000000];
int flag[2000];
int main()
{
    int n, m;
    cin >> n >> m;
    int sum = 0;
    for(int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    int x = 0, y = 0;
    int ans = 2147483644, ansl, ansr;
    while(y < n - 1 && x <= y)
    {
        if(sum < m && y < n - 1)
        {
            y++;
            flag[a[y]]++;
            if(flag[a[y]] == 1)sum++;
        }else if(sum == m)
        {
            if(ans > y - x)
            {
                ans = y - x;
                ansl = x; ansr = y;
            }
            flag[a[x]]--;
            if(flag[a[x]] == 0)
            {
                sum--;
            }
            x++;

        }
        
    }
    cout << ansl << ' ' << ansr << endl;
    return 0;
}

谢谢万能的谷民们

2022/9/19 23:39
加载中...