zoukankan      html  css  js  c++  java
  • Uva 11572 唯一的雪花

    题目链接:https://uva.onlinejudge.org/external/115/11572.pdf

    题意:找到一个尽量长的连续子序列 A~ AR ,使得该序列没有相同的元素。

    分析:枚举超时,怎么优化呢? 当我不停的将右端点右移,当我移不动的时候,说明之前的 l ~ r  里面有一个和 r++的元素相同。

    但是,不代表 l ~ r 就没有用了,他本身还是有作用的,只要将 l 右移即可。这样,单看这里,时间复杂度为O(n) ,

    然后就是查看 r++ 的元素是否和前面的相同,用 set 集合,时间复杂度是 O(log n) ;

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int maxn = 1000000 + 5;
     6 
     7 int a[maxn];
     8 
     9 int main()
    10 {
    11     int t;
    12     cin>>t;
    13     while(t--) {
    14         int n;
    15         cin>>n;
    16         for(int i=0;i<n;i++)
    17             cin>>a[i];
    18 
    19         set<int> s;
    20         int L = 0;
    21         int R = 0;
    22         int ans = 0;
    23         while(R<n) {
    24             while(R<n&&!s.count(a[R])) s.insert(a[R++]);
    25             ans = max(ans,R-L);
    26             s.erase(a[L++]);
    27         }
    28         cout<<ans<<endl;
    29     }
    30 
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    html标签嵌套规则
    关于setTimeout和Promise执行顺序问题
    vue基础
    new操作符具体干了什么
    ["1", "2", "3"].map(parseInt)
    线性表
    树的一些概念和性质
    A*与IDA*
    树上启发式合并
    启发式合并
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6561037.html
Copyright © 2011-2022 走看看