假设我们有一个整数数组ARR和整数差,我们必须找到在ARR的最长子序列,其是算术序列,使得在子序列相邻元件之间的差是一样的差的长度。因此,如果输入像[1,5,7,8,5,3,4,2,1]且差为-2,则输出将为− 4,因为最长的算术序列为[7,5, 3,1]
为了解决这个问题,我们将遵循以下步骤-
定义映射m
n:=数组arr的大小,设置ans:= 0
对于i,范围为0至n – 1
x:= arr [i]
M [X]:= 1 + M [X - d]
ANS:=最大的,且m [X]
返回ans
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int longestSubsequence(vector<int>& arr, int d) { int n = arr.size(); map <int,int> m; int ans = 0; for(int i =0;i<n;i++){ int x = arr[i]; m[x] = 1 + (m[x-d]); ans = max(ans,m[x]); } return ans; } }; main(){ vector<int> v1 = {1,5,7,8,5,3,4,2,1}; Solution ob; cout <<ob.longestSubsequence(v1, -2); }
[1,5,7,8,5,3,4,2,1] -2
输出结果
4