【leetcode】1218. Longest Arithmetic Subsequence of Given Difference
题目如下:
Given an integer array
arrand an integerdifference, return the length of the longest subsequence inarrwhich 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
浙公网安备 33010602011771号