算法学习之路 双指针算法


/*
双指针算法可以解决像最长不重复子序列一样的问题
思路:先暴力想思路判断check()的条件,再将n^2利用模板优化为n的双指针算法;
总思路模板:

 
    for(int i = 1,j = 1;i < n;i++)
    {
        while(j < i && check())
        {
            j++;
            s[a[i]]–;
        }
        res = max(res , i – j + 1);
    }

*/
//处理最长不重复子序列的双指针算法
 

#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int a[N];
int b[N];//注意标记数组的类型要与数组保持一致;
int main()
{
    int n;
    cin>>n; //数组长度为n
    for(int i = 0;i < n;i++)
    {
        cin>>a[i];
    }
    int res  = 0;
    for(int i = 0,j = 0;i < n;i++)
    {
        b[a[i]]++;
        while(j < i && b[a[i]] > 1)
        {
            b[a[j]]–;
            j++;
        }
        res = max(res , i – j + 1);
    }
    cout<<res;
    system(“pause”);
    return 0;
}

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/277663.html

(0)
上一篇 2022年7月29日 08:37
下一篇 2022年7月29日 08:37

相关推荐

发表回复

登录后才能评论