Problem

Given an integer array nums, return the number of subarrays of length 3 such that the sum of the first and third numbers equals exactly half of the second number.

Examples

Example 1:

1
2
3
4
5
Input: nums = [1,2,1,4,1]
Output: 1
Explanation:
Only the subarray `[1,4,1]` contains exactly 3 elements where the sum of the
first and third numbers equals half the middle number.

Example 2:

1
2
3
4
5
Input: nums = [1,1,1]
Output: 0
Explanation:
`[1,1,1]` is the only subarray of length 3. However, its first and third
numbers do not add to half the middle number.

Constraints

  • 3 <= nums.length <= 100
  • -100 <= nums[i] <= 100

Solution

Method 1 - Iteration

Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution {

    public int countSubarrays(int[] nums) {
        int ans = 0;
        for (int i = 1; i < nums.length - 1; i++) {
            if (nums[i - 1] + nums[i + 1] == nums[i] / 2.0) {
                ans++;
            }
        }
        return ans;
    }
}
1
2
3
4
5
6
7
class Solution:
    def countSubarrays(self, nums: List[int]) -> int:
        ans: int = 0
        for i in range(1, len(nums) - 1):
            if nums[i - 1] + nums[i + 1] == nums[i] / 2:
                ans += 1
        return ans

Complexity

  • ⏰ Time complexity: O(n). We iterate through the array once and perform a constant-time comparison for each element.
    • O(n) where n is the length of the array.
  • 🧺 Space complexity: O(1) as no additional space other than the counter variable ans.