Welcome to Subscribe On Youtube
1218. Longest Arithmetic Subsequence of Given Difference
Description
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
Solutions
-
class Solution { public int longestSubsequence(int[] arr, int difference) { Map<Integer, Integer> f = new HashMap<>(); int ans = 0; for (int x : arr) { f.put(x, f.getOrDefault(x - difference, 0) + 1); ans = Math.max(ans, f.get(x)); } return ans; } }
-
class Solution { public: int longestSubsequence(vector<int>& arr, int difference) { unordered_map<int, int> f; int ans = 0; for (int x : arr) { f[x] = f[x - difference] + 1; ans = max(ans, f[x]); } return ans; } };
-
class Solution: def longestSubsequence(self, arr: List[int], difference: int) -> int: f = defaultdict(int) for x in arr: f[x] = f[x - difference] + 1 return max(f.values())
-
func longestSubsequence(arr []int, difference int) (ans int) { f := map[int]int{} for _, x := range arr { f[x] = f[x-difference] + 1 ans = max(ans, f[x]) } return }
-
function longestSubsequence(arr: number[], difference: number): number { const f: Map<number, number> = new Map(); for (const x of arr) { f.set(x, (f.get(x - difference) ?? 0) + 1); } return Math.max(...f.values()); }
-
/** * @param {number[]} arr * @param {number} difference * @return {number} */ var longestSubsequence = function (arr, difference) { const f = new Map(); for (const x of arr) { f.set(x, (f.get(x - difference) || 0) + 1); } return Math.max(...f.values()); };
-
use std::collections::HashMap; impl Solution { pub fn longest_subsequence(arr: Vec<i32>, difference: i32) -> i32 { let mut f = HashMap::new(); let mut ans = 0; for &x in &arr { let count = f.get(&(x - difference)).unwrap_or(&0) + 1; f.insert(x, count); ans = ans.max(count); } ans } }