优化在后面!
给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。
子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。
说的通但跑不通的代码:
class Solution {
public:
int longestSubsequence(vector<int>& arr, int difference) {
int n = arr.size();
vector<int> dp(n, 1);
int retMax = 1;
for(int i = 1; i < n; i++)
{
for(int j = 0; j < i; j++)
{
if(arr[i] - arr[j] == difference)
{
dp[i] = dp[j] + 1;
}
}
retMax = max(retMax, dp[i]);
}
return retMax;
}
};
写到这里本人都以为只是一个练手题
…
直到
…
…
…
只好拿出 hash,再来一遍
🐎代码如下:
class Solution {
public:
int longestSubsequence(vector<int>& arr, int difference) {
unordered_map<int, int> hash; // arr, dp
hash[arr[0]] = 1; // 初始化
int retMax = 1;
for(int i = 1; i < arr.size(); i++)
{
hash[arr[i]] = hash[arr[i] - difference] + 1;
retMax = max(retMax, hash[arr[i]]);
}
return retMax;
}
};
🥰如果本文对你有些帮助,欢迎👉 点赞 收藏 关注,你的支持是对作者大大莫大的鼓励!!(????) 若有差错恳请留言指正~~