題意:輸入乙個長度為n(n<=10^6)的序列a,找乙個盡量長的連續子串行a[l]..a[r],使得序列中沒有相同的元素。
這道題要用滑動視窗的思想,右端點一直擴充套件直至右端點元素與視窗內元素重複時,刪除左端點元素直至右端點元素與視窗內元素不相同。找到視窗內元素最多時就是最長連續子串行。
//map實現
#include
#include
#include
#include
using
namespace
std;
const
int maxn=1000002;
int n,a[maxn];
mapa; //元素,元素出現次數
map::iterator it;
int main()
int l=1,ans=0;
for(int r=1;r<=n;r++)
ans=max(ans,r-l+1);
}printf("%d",ans);
return
0;}
//set實現
#include
#include
#include
#include
using
namespace
std;
const
int maxn=1000002;
int n,a[maxn];
seta;
set::iterator it;
int main()
int l=1,r=1,ans=0;
a.insert(a[l]);
for(r=2;r<=n;r++)
a.insert(a[r]);
ans=max(ans,r-l+1);
}printf("%d",ans);
return
0;}
UVA 11572 唯一的雪花 滑動視窗
這道題採用滑動視窗的做法 set o n 首先l和r都指向a 0 這時我們擴充套件r,直到r擴充套件不了,我們擴充套件l,怎麼判斷r擴充套件不了了呢,可以用乙個set,把擴充套件過的元素全部insert到set裡,當a r 1 的元素已經在set裡出現過或者a r 已經是最後乙個元素,我們就不能再擴...
UVa 11572 唯一的雪花(滑動視窗)
問題 輸入乙個長度為n的序列a,找到乙個最長的連續子串行,使得該序列中沒有重複的元素。分析 假設序列元素從0編號,所求子串行的左端索引為l,右端索引為r。首先,l和r從0開始。判斷a r 是否在子串行中,如果不在子串行中,r增大 如果在子串行中,r無法增大。求連續子串行最大長度。l向右增大一,重複 ...
唯一的雪花(UVa 11572)
map容器解法 使用hash map 輸入乙個長度為n n 106 的序列a,找到乙個盡量長的連續子串行a l ar,使得該序列中沒有相同的元素。set解法 因為序列中沒有相同的元素,比較容易想到用乙個stl中的set,儲存a l r 中元素的組合。當r增大時判斷a r 1 是否在set 現,如果不...