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:
1 <= arr.length <= 105
-104 <= arr[i], difference <= 104
class Solution:
def longestSubsequence(self, arr: List[int], difference: int) -> int:
dp, ans = defaultdict(int), 1
for num in arr:
dp[num] = dp[num - difference] + 1
ans = max(ans, dp[num])
return ans
class Solution {
public int longestSubsequence(int[] arr, int difference) {
Map<Integer, Integer> dp = new HashMap<>();
int ans = 1;
for (int num : arr) {
dp.put(num, dp.getOrDefault(num - difference, 0) + 1);
ans = Math.max(ans, dp.get(num));
}
return ans;
}
}
class Solution {
public:
int longestSubsequence(vector<int>& arr, int difference) {
unordered_map<int, int> dp;
int ans = 1;
for (int num : arr) {
dp[num] = dp[num - difference] + 1;
ans = max(ans, dp[num]);
}
return ans;
}
};
func longestSubsequence(arr []int, difference int) int {
dp, ans := make(map[int]int), 1
for _, num := range arr {
dp[num] = dp[num-difference] + 1
ans = max(ans, dp[num])
}
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
/**
* @param {number[]} arr
* @param {number} difference
* @return {number}
*/
var longestSubsequence = function (arr, difference) {
let ans = 1;
const dp = new Map();
for (const v of arr) {
dp.set(v, (dp.get(v - difference) || 0) + 1);
ans = Math.max(ans, dp.get(v));
}
return ans;
};