(连续子序列)唯一的雪花
生活随笔
收集整理的這篇文章主要介紹了
(连续子序列)唯一的雪花
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
輸入一個長度為n(n<=1e6)的序列A,找到一個盡量長的連續子序列AL~AR,使得該序列中沒有相同元素。輸出最大長度。
分析與解答
對于這種子序列問題我們采用模擬的方法
方法一:利用set
1.如果有一個序列的元素沒出現過,就把元素存到set里,
2.如果出現過,說明a[r+1]在子序列a[l]——a[r]出現過,那此時就不斷地刪去l,直到r增大到n
注意這里并不是說我刪掉最左邊的,那么l+1到r+1就是一個新的滿足條件的最長子序列,比如1,2,3,4,5,4,6,7,8,9
這里只不過是把所有可能情況走一遍
左邊走,右邊停著
右邊走,左邊停著
決定誰停的條件,就是r+1是不是曾經出現過,用set的count函數非常方便,而且set也有插入和刪除,左邊往前走,刪除,右邊往前走,插入
3.注意保存并更新最大序列個數
方法二
利用map
1.構造數組last[i],存的元素是下標i的上一個相同元素的下標
如果這個元素第一次出現,那么last[i]=-1
2.map分別存的是值和下標,cur[值]=下標
3.同樣是有一個l,last[r]與l進行比較,如果小于,說明此時可以繼續擴展
4.雖然麻煩,但是與抽屜原理異曲同工之妙
總結
以上是生活随笔為你收集整理的(连续子序列)唯一的雪花的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (栈)网页跳转
- 下一篇: php 留言板分页显示,php有分页的留