034 - There are few types of elements(★4)

034 - There are few types of elements(★4)

キーワード

解説

問題 (opens in a new tab)

尺取り法で最大区間を求めるだけ.

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)
}