个人技术分享

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
}

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。
】