Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2367.html
2367. Number of Arithmetic Triplets
- Difficulty: Easy.
- Related Topics: Array, Hash Table, Two Pointers, Enumeration.
- Similar Questions: Two Sum, 3Sum.
Problem
You are given a 0-indexed, strictly increasing integer array nums
and a positive integer diff
. A triplet (i, j, k)
is an arithmetic triplet if the following conditions are met:
-
i < j < k
, -
nums[j] - nums[i] == diff
, and -
nums[k] - nums[j] == diff
.
Return the number of unique **arithmetic triplets.**
Example 1:
Input: nums = [0,1,4,6,7,10], diff = 3
Output: 2
Explanation:
(1, 2, 4) is an arithmetic triplet because both 7 - 4 == 3 and 4 - 1 == 3.
(2, 4, 5) is an arithmetic triplet because both 10 - 7 == 3 and 7 - 4 == 3.
Example 2:
Input: nums = [4,5,6,7,8,9], diff = 2
Output: 2
Explanation:
(0, 2, 4) is an arithmetic triplet because both 8 - 6 == 2 and 6 - 4 == 2.
(1, 3, 5) is an arithmetic triplet because both 9 - 7 == 2 and 7 - 5 == 2.
Constraints:
-
3 <= nums.length <= 200
-
0 <= nums[i] <= 200
-
1 <= diff <= 50
-
nums
is strictly increasing.
Solution (Java, C++, Python)
-
class Solution { public int arithmeticTriplets(int[] nums, int diff) { Set<Integer> set = new HashSet<>(); for (int x : nums) { set.add(x); } int ans = 0; for (int x : nums) { if (set.contains(x - diff) && set.contains(x + diff)) { ans++; } } return ans; } } ############ class Solution { public int arithmeticTriplets(int[] nums, int diff) { boolean[] vis = new boolean[310]; for (int v : nums) { vis[v] = true; } int ans = 0; for (int v : nums) { if (vis[v + diff] && vis[v + diff + diff]) { ++ans; } } return ans; } }
-
class Solution: def arithmeticTriplets(self, nums: List[int], diff: int) -> int: s = set(nums) return sum(v + diff in s and v + diff + diff in s for v in nums) ############ # 2367. Number of Arithmetic Triplets # https://leetcode.com/problems/number-of-arithmetic-triplets/ class Solution: def arithmeticTriplets(self, nums: List[int], diff: int) -> int: n = len(nums) res = 0 for i in range(n): for j in range(i + 1, n): for k in range(j + 1, n): if nums[j] - nums[i] == diff and nums[k] - nums[j] == diff: res += 1 return res
-
class Solution { public: int arithmeticTriplets(vector<int>& nums, int diff) { vector<bool> vis(310); for (int v : nums) vis[v] = true; int ans = 0; for (int v : nums) ans += vis[v + diff] && vis[v + diff + diff]; return ans; } };
-
func arithmeticTriplets(nums []int, diff int) int { vis := make([]bool, 310) for _, v := range nums { vis[v] = true } ans := 0 for _, v := range nums { if vis[v+diff] && vis[v+diff+diff] { ans++ } } return ans }
-
function arithmeticTriplets(nums: number[], diff: number): number { let vis = new Array(310).fill(false); for (const v of nums) { vis[v] = true; } let ans = 0; for (const v of nums) { if (vis[v + diff] && vis[v + diff + diff]) { ++ans; } } return ans; }
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).