原题链接:https://leetcode.cn/problems/subarray-with-elements-greater-than-varying-threshold/description/
func validSubarraySize(nums []int, threshold int) int {
// 并查集模版
n := len(nums)
fa := make([]int, n+1)
for i := 0; i <= n; i ++ {
fa[i] = i
}
var find func(x int) int
find = func(x int) int {
if fa[x] != x {
fa[x] = find(fa[x])
}
return fa[x]
}
type pair struct {
i int
v int
}
pairs := make([]pair, 0)
for i, num := range nums {
pairs = append(pairs, pair{i, num})
}
sort.Slice(pairs, func(i, j int) bool {
if pairs[i].v > pairs[j].v {
return true
}
return false
})
sz := make([]int, n+1)
for _, pair := range pairs {
i := pair.i
j := find(i+1)
fa[i] = j // 合并i和i+1
sz[j] += sz[i] + 1
// fmt.Println(fa, sz)
if pair.v > threshold/sz[j] {
return sz[j]
}
}
return -1
}