[1218. Longest Arithmetic Subsequence of Given Difference](https://leetcode.com/problems/find-eventual-safe-states/) ### 題目描述 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` <= 10^5^ * -10^4^ <= `arr[i]`, `difference` <= 10^4^ ### 解答 #### C++ ``` cpp= 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; } }; ``` > [name=Jerry Wu][time=14 July, 2023] #### Python ```python= 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()) ``` > [name=Yen-Chi Chen][time=Sat, Jul 15, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)