UVA 11572 唯一的雪花 滑動視窗

2021-09-12 08:38:38 字數 508 閱讀 5635

這道題採用滑動視窗的做法;

set o(n)

首先l和r都指向a[0],這時我們擴充套件r,直到r擴充套件不了,我們擴充套件l,怎麼判斷r擴充套件不了了呢,可以用乙個set,把擴充套件過的元素全部insert到set裡,當a[r+1]的元素已經在set裡出現過或者a[r]已經是最後乙個元素,我們就不能再擴充套件r,這時ans為max(ans,r-l),然後就擴充套件l,同時要刪掉set裡的a[l],直到刪掉的a[l]等於a[r+1],這時r就可以擴充套件,如此迴圈,當r等於n-1時(從0開始擴充套件),就保留最大的ans,退出迴圈;

#include#include#define ll long long

using namespace std;

sets;

const int maxn = 1e6+10;

ll a[maxn];

int main()

printf("%d\n",ans);

} return 0;

}

map

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

題意 輸入乙個長度為n n 10 6 的序列a,找乙個盡量長的連續子串行a l a r 使得序列中沒有相同的元素。這道題要用滑動視窗的思想,右端點一直擴充套件直至右端點元素與視窗內元素重複時,刪除左端點元素直至右端點元素與視窗內元素不相同。找到視窗內元素最多時就是最長連續子串行。map實現 incl...

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 現,如果不...