题解 | 【模板】双指针

【模板】双指针

https://www.nowcoder.com/practice/a2fd81391e1e4177aa6d506da895381b

#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>

using namespace std;

typedef pair<int, int> PII;

const int N = 2e5 + 10;
int a[N];


bool comp(PII a,PII b){
    return a.first < b.first;
    // return a.second < b.second;
}

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    vector<PII> results;
    unordered_map<int,int> memo;
    int i = -1,j = 0;
    int current_len = 0;
    int max_len = 0;

    while(i < n){
        do{
            i++; 
            memo[a[i]]++;
        }while(memo[a[i]] <= 1 && i < n);

        // while(memo[a[i]] <= 1 && i < n){
        //     memo[a[i]]++;
        //     i++;
        // }
        current_len = i - j;

        if(current_len > max_len){
            results.clear();
            results.push_back({j,i - 1});
            max_len = current_len;
        }
        else if(current_len == max_len){
            results.push_back({j,i - 1});
        }
        // do{
        //     j++;
        //     memo[a[j]]--;
        // }while(memo[a[i]] > 1 && j < n);
        while(memo[a[i]] > 1 && j < n){
            memo[a[j]]--;
            j++;
        }

    }

    sort(results.begin(),results.end(),comp);
    cout<<results.size()<<"\n";
    for(auto t : results){
        cout<<t.first + 1<<" "<<t.second + 1<<"\n";
    }

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不知道怎么取名字_:看来现在卷的,这种单位都开始提高要求了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务