【leetcode】1218. Longest Arithmetic Subsequence of Given Difference
题目如下:
Given an integer array
arr
and an integerdifference
, return the length of the longest subsequence inarr
which is an arithmetic sequence such that the difference between adjacent elements in the subsequence equalsdifference
.
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
解题思路:记dic[i] = v 表示元素i是当前组成公差difference的第v个元素。只要遍历arr,判断每个元素i - different 是否存在于dic中;如果存在,dic[i] = dic[i-difference] + 1 ,否则dic[i] = 1。最后求出dic中value的最大值即可。
代码如下:
class Solution(object): def longestSubsequence(self, arr, difference): """ :type arr: List[int] :type difference: int :rtype: int """ dic = {} res = 1 for i in arr: if (i - difference) in dic: dic[i] = dic[i-difference] + 1 else: dic[i] = 1 res = max(res, dic[i]) return res