Number of Arithmetic Triplets

easy array hash set two pointers

Problem

Given a strictly increasing array nums and an integer diff, count index triplets (i, j, k) with i < j < k such that nums[j] − nums[i] = diff and nums[k] − nums[j] = diff.

Inputnums = [0,1,4,6,7,10], diff = 3
Output2
(1,4,7) and (4,7,10) are arithmetic triplets.

def arithmetic_triplets(nums, diff):
    seen = set(nums)
    count = 0
    for x in nums:
        if x + diff in seen and x + 2 * diff in seen:
            count += 1
    return count
function arithmeticTriplets(nums, diff) {
  const seen = new Set(nums);
  let count = 0;
  for (const x of nums) {
    if (seen.has(x + diff) && seen.has(x + 2 * diff)) count++;
  }
  return count;
}
class Solution {
    public int arithmeticTriplets(int[] nums, int diff) {
        Set<Integer> seen = new HashSet<>();
        for (int x : nums) seen.add(x);
        int count = 0;
        for (int x : nums)
            if (seen.contains(x + diff) && seen.contains(x + 2 * diff)) count++;
        return count;
    }
}
int arithmeticTriplets(vector<int>& nums, int diff) {
    unordered_set<int> seen(nums.begin(), nums.end());
    int count = 0;
    for (int x : nums)
        if (seen.count(x + diff) && seen.count(x + 2 * diff)) count++;
    return count;
}
Time: O(n) Space: O(n)