uva 11572 唯一的雪花 (滑動視窗)

2021-07-15 07:57:10 字數 988 閱讀 7576

題意:輸入乙個長度為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 現,如果不...