自己做网站 需要会什么6,营销推广有哪些步骤,上海专业高端网站建设服,wordpress倒闭汉化组问题
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。
如果子数组中所有元素都相等#xff0c;则认为子数组是一个 等值子数组 。注意#xff0c;空数组是 等值子数组 。
从 nums 中删除最多 k 个元素后#xff0c;返回可能的最长等值子数组的长度。
子数组 是数…问题
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。
如果子数组中所有元素都相等则认为子数组是一个 等值子数组 。注意空数组是 等值子数组 。
从 nums 中删除最多 k 个元素后返回可能的最长等值子数组的长度。
子数组 是数组中一个连续且可能为空的元素序列。
示例
示例 1
输入nums [1,3,2,3,1,3], k 3 输出3 解释最优的方案是删除下标 2 和下标 4 的元素。 删除后nums 等于 [1, 3, 3, 3] 。 最长等值子数组从 i 1 开始到 j 3 结束长度等于 3 。 可以证明无法创建更长的等值子数组。 示例 2
输入nums [1,1,2,2,1,1], k 2 输出4 解释最优的方案是删除下标 2 和下标 3 的元素。 删除后nums 等于 [1, 1, 1, 1] 。 数组自身就是等值子数组长度等于 4 。 可以证明无法创建更长的等值子数组。
思想
滑动窗口通过map记录每个值出现的下标位置然后通过滑动窗口的思想通过下标索引的差值减去两索引位置的差值当小于等于k时即可。
代码
func longestEqualSubarray(nums []int, k int) int {pos : make(map[int][]int)for i,v : range nums {pos[v] append(pos[v],i)}ans : 0for _,vec : range pos{j : 0for i :0; i len(vec); i {if vec[i] - vec[j] - (i - j) k {j}ans max(ans,i-j1)}}return ans
}