wenbao与尺取法


 1 void worm_solve(){
 2     int res=MAX;
 3     int s=0,t=0,sum=0;
 4     for(;;){
 5         while(t<n && sum < S){
 6             sum+=a[t++];
 7         }
 8         if(sum<S) break;
 9         res=min(res,t-s);
10         sum-=a[s++];
11     }
12     if(res>n){
13         res=0;
14     }
15     printf("%d\n",res);
16 }

 

 

 1 #include <iostream>
 2 #include <set>
 3 #include <map>
 4 #include <stdio.h>
 5 using namespace std;
 6 
 7 const int maxn = 1e6+10;
 8 set<int> s;
 9 map<int ,int >m;
10 int a[maxn],n;
11 
12 int main(){
13     scanf("%d",&n );
14     for(int i=0;i<n;i++){
15         scanf("%d", &a[i]);
16         s.insert(a[i]);
17     }
18     int len = s.size();
19     int l=0,r=0,num=0,sum=0,mi=maxn;
20     while(l<=r&&l<n){
21         while(num<len&&r<n){
22             m[a[r]]++;
23             if(m[a[r]]==1) num++;
24             r++;
25         }
26         if(num==len){
27             mi=min(mi,r-l);
28         }
29         if(m[a[l]]==1) num--;
30         m[a[l]]--;
31         l++;
32     }
33     printf("%d\n",mi );
34     return 0;
35 }

 


只有不断学习才能进步!

 

posted @ 2018-04-14 13:49  wenbao  阅读(102)  评论(0编辑  收藏  举报