题目描述
给你一个整数数组 nums
,请你返回长度为 3 的子数组的个数,满足第一个数和第三个数的和恰好为第二个数的一半。
子数组 指的是一个数组中连续 非空 的元素序列。
样例
输入:nums = [1,2,1,4,1]
输出:1
解释:
只有子数组 [1,4,1] 包含 3 个元素且第一个和第三个数字之和是中间数字的一半。
输入:nums = [1,1,1]
输出:0
解释:
[1,1,1] 是唯一长度为 3 的子数组,但第一个数和第三个数的和不是第二个数的一半。
限制
3 <= nums.length <= 100
-100 <= nums[i] <= 100
算法
(遍历) $O(n)$
- 按顺序遍历每个长度为 3 的子数组,判断是否符合条件。
时间复杂度
- 遍历数组一次,故时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
int countSubarrays(vector<int>& nums) {
const int n = nums.size();
int ans = 0;
for (int i = 1; i < n - 1; i++)
if (2 * (nums[i - 1] + nums[i + 1]) == nums[i])
++ans;
return ans;
}
};