1218. Longest Arithmetic Subsequence of Given Difference
Given an integer array arr
and an integer difference
, return the length of the longest subsequence in arr
which is an arithmetic sequence such that the difference between adjacent elements in the subsequence equals difference
.
A subsequence is a sequence that can be derived from arr
by deleting some or no elements without changing the order of the remaining elements.
Example 1:
Input: arr = [1,2,3,4], difference = 1
Output: 4
Explanation: The longest arithmetic subsequence is [1,2,3,4].
Example 2:
Input: arr = [1,3,5,7], difference = 1
Output: 1
Explanation: The longest arithmetic subsequence is any single element.
Example 3:
Input: arr = [1,5,7,8,5,3,4,2,1], difference = -2
Output: 4
Explanation: The longest arithmetic subsequence is [7,5,3,1].
Constraints:
arr.length
<= 105arr[i]
, difference
<= 104
class Solution {
public:
int longestSubsequence(vector<int>& nums, int diff) {
int n = nums.size();
int ans = 1;
unordered_map<int, int> seen;
seen[nums[0]] ++;
for (int i = 1; i < nums.size(); i ++) {
seen[nums[i]] = seen.count(nums[i] - diff) ? 1 + seen[nums[i] - diff] : 1;
ans = max(ans, seen[nums[i]]);
}
return ans;
}
};
Jerry Wu14 July, 2023
class Solution:
def longestSubsequence(self, arr: List[int], difference: int) -> int:
d = defaultdict(int)
for n in arr:
d[n] = d[n - difference] + 1
return max(d.values())
Yen-Chi ChenSat, Jul 15, 2023