3392. 统计符合条件长度为 3 的子数组数目
问题
问题分析
统计符合条件的长度为 3 的子数组数目。具体条件是:子数组的第一个数和第三个数的和恰好为第二个数的一半。
思路
遍历数组:由于子数组长度固定为 3,我们可以通过遍历数组来检查每个长度为 3 的子数组是否满足条件。
检查条件:对于每个子数组 [nums[i], nums[i+1], nums[i+2]],检查是否满足 nums[i] + nums[i+2] == nums[i+1] / 2。
计数:如果满足条件,则计数器加 1。
代码
def count_good_subarrays(nums):count = 0n = len(nums)# 遍历数组,检查每个长度为 3 的子数组for i in range(n - 2):# 检查条件:第一个数和第三个数的和恰好为第二个数的一半if nums[i] + nums[i + 2] == nums[i + 1] / 2:count += 1return count
复杂度分析
时间复杂度:算法的时间复杂度为 (O(n)),其中 (n) 是数组 nums 的长度。这是因为在最坏情况下,算法需要遍历数组一次,并对每个长度为 3 的子数组进行常数时间的检查。
空间复杂度:算法的空间复杂度为 (O(1)),因为只使用了常数级的额外空间。
学习
定义 countSubarrays 方法:
def countSubarrays(self, nums: List[int]) -> int::定义一个方法 countSubarrays,接受一个整数列表 nums 作为参数,并返回一个整数。
ans = 0:初始化计数器 ans 为 0,用于记录满足条件的子数组数量。
n = len(nums):获取数组 nums 的长度。
遍历数组:
for i in range(n - 2)::遍历数组,确保每次检查的子数组长度为 3。
条件检查:
if nums[i] + nums[i + 2] == nums[i + 1] / 2::检查当前子数组是否满足题目要求,即第一个数和第三个数的和恰好为第二个数的一半。
计数:
ans += 1:如果满足条件,计数器 ans 加 1。
返回结果:
return ans:方法最后返回计数器 ans 的值。