LeetCode?启动!!!
题目:找出最长等值子数组
题目链接:2831. 找出最长等值子数组
题目描述
代码与解题思路
通过哈希的思想,记录每个值对应的下标,再通过滑动窗口,计算下标之间的空隙,最后根据 k 的大小求出最长的子数组
func longestEqualSubarray(nums []int, k int) int {
pos := make([][]int, len(nums)+1)
for i, v := range nums {
pos[v] = append(pos[v], i)
}
ans := 1
for _, ps := range pos {
l, r, n := 0, 0, len(ps)
for r < n {
// 下标距离 - 正常距离 = 非该值的数的个数(空隙的大小)
for ps[r]-ps[l] - (r-l) > k {
l++
}
ans = max(ans, r-l+1)
r++
}
}
return ans
}
每天进步一点点
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。