034 - There are few types of elements(★4)
キーワード
解説
尺取り法で最大区間を求めるだけ.
map
を使うなどして, 区間に含まれるそれぞれの個数を管理しておく.
区間に初めて入った時に種類数cnt++
, 区間から亡くなった時にcnt--
をすることに注意.
提出コード
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
var n, k int
scanIntVariables(&n, &k)
A := readInts()
l := 0
r := 0
ans := 0
m := make(map[int]int)
m[A[0]] = 1
cnt := 1
for r < n {
if cnt <= k {
ans = max(ans, r-l+1)
r++
if r < n {
m[A[r]]++
if m[A[r]] == 1 {
cnt++
}
}
continue
}
m[A[l]]--
if m[A[l]] == 0 {
cnt--
}
l++
}
writeLine(ans)
}