2367. Number of Arithmetic Triplets
SourceWeekly Contest 305 Q1DifficultyEasyRating1203
Description
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, andnums[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 <= 2000 <= nums[i] <= 2001 <= diff <= 50numsis strictly increasing.
Solutions
Solution 1: Brute Force
Thinking
Count triples with common difference \(diff\) in a strictly increasing array. \(n \le 200\) allows a triple loop.
Enumerate three indices and test both gaps against \(diff\).
We notice that the length of the array \(nums\) is no more than \(200\). Therefore, we can directly enumerate \(i\), \(j\), \(k\), and check whether they meet the conditions. If they do, we increment the count of the triplet.
The time complexity is \(O(n^3)\), where \(n\) is the length of the array \(nums\). The space complexity is \(O(1)\).
1 2 3 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Solution 2: Array or Hash Table
Thinking
Method 1 is cubic. Values and length are tiny, so a set plus queries for \(x+diff\) and \(x+2diff\) is linear.
We can first store the elements of \(nums\) in a hash table or array \(vis\). Then, for each element \(x\) in \(nums\), we check if \(x+diff\) and \(x+diff+diff\) are also in \(vis\). If they are, we increment the count of the triplet.
After the enumeration, we return the answer.
The time complexity is \(O(n)\) and the space complexity is \(O(n)\), where \(n\) is the length of the array \(nums\).
1 2 3 4 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |