• poj 3320 复习一下尺取法


    尺取法(two point)的思想不难,简单来说就是以下三步:

    1。对r point在满足题意的情况下不断向右延伸

    2。对l point前移一步 

    3.  回到1

    two point 对连续区间的问题求解有其独到之处 复杂度为0(n) 很实用的 

    #include<iostream>
    #include<map>
    #include<set>
    #include<vector>
    #include<cstdio>
    #define inf 1000002
    using namespace std;
    int a[inf];
    int main()
    {
        //cin.sync_with_stdio(false);
       int n;
       set<int> all;
       while(~scanf("%d",&n))
       {
           all.clear();
           map<int,int> mapp;
           for(int i=1;i<=n;i++)
           {
               scanf("%d",&a[i]);
               all.insert(a[i]);
           }
           int len = all.size();
           int e,num,s;
           s = e = 1;
           num = 0;
           int minlen = inf;
           while(1)
           {
               while(num < len && e<=n)// 向右延伸
               {
                    if(mapp[a[e++]]++ == 0)
                    {
                        num++;
                    }
               }
               if(num < len) break;// 延伸不下去的时候 要结束啦
               minlen=min(minlen, e-s);
               if(--mapp[a[s++]] == 0)// letf point 的更新
                   num--;
           }
           cout<<minlen<<endl;
       }
    }
  • 相关阅读:
    matlab中的rng函数
    重装系统的两种方法
    如何用cmd指令清除U盘的PE分区
    python缩进
    matlab处理dat数据
    word空格后整体移动的问题
    窗函数
    去除信号中的直流分量
    第07组 团队Git现场编程实战
    第二次结对编程作业
  • 原文地址:https://www.cnblogs.com/z1141000271/p/6574685.html
Copyright © 2020-2023  润新知