【LeetCode 1218】 Longest Arithmetic Subsequence of Given Difference

题目描述

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.

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

思路

动态规划。mp[i] 表示以数字num[i] 结尾的等差数列长度。新的数字num,如果num-diff出现过,说明可以接在num-diff后面构成新的数列, mp[num] = max(mp[num], mp[num-diff]+1)。否则为1。

代码

class Solution {
public:
    int longestSubsequence(vector<int>& arr, int difference) {
        int n = arr.size();
        unordered_map<int, int> mp;
        int res = 1;
        for (auto num : arr) {
            if (mp.count(num-difference)) 
                mp[num] = max(mp[num], mp[num-difference]+1);
            else mp[num] = 1;
            res = max(mp[num], res);
        }
        return res;
    }
};

今天也是产出超低的一天。。。脑阔痛。

你可能感兴趣的:(LeetCode,动态规划)