【LeetCode】每日一题 2024_11_6 长度为 K 的子数组的能量值 I(模拟、一次遍历)
前言
每天和你一起刷 LeetCode 每日一题~
LeetCode 启动!
题目:长度为 K 的子数组的能量值 I
明天的题目:长度为 K 的子数组的能量值 II 和本题一模一样,只是数据范围更大,所以明天可能就没有题解更新了~
代码与解题思路
先读题:题目讲的非常清晰,需要找到长度为 k 的子数组的能量值,且子数组的所有 元素都是依次 连续 且 上升 的,能量值为子数组的 最大 元素,否则能量值就是 -1
看一眼其实就能想到,直接用双层 for 循环暴力就能解题,一般来说我会先用暴力做一做,不过这次就懒得写暴力了(一般在没有思路的情况下我会先暴力热热身)
核心思路:
当子数组是连续且递增的时候,累加 cnt,当 cnt >= k 时更新能量值,能量值默认为 -1,而当子数组不符合要求时,重置 cnt,重新计数。代码如下:
func resultsArray(nums []int, k int) []int {
ans, cnt := make([]int, len(nums)-k+1), 0
// 否则为 -1
for i := range ans {
ans[i] = -1
}
for i, v := range nums {
// 如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素
if i == 0 || nums[i-1]+1 == v {
cnt += 1
} else {
cnt = 1
}
// 求出 nums 中所有长度为 k 的 子数组 的能量值
if cnt >= k {
ans[i-k+1] = v
}
}
return ans
}
(注意:连续的意思是:当前元素和上一个元素的差值是 1,像:1,2,3,4,5 . . . 这种就是连续)
每天进步一点点,我们明天不见不散~
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。