5214. 最长定差子序列

mac2022-07-05  29

动态规划: 用dp[i]表示以i结尾的数字的最长定差子序列的长度,由于数字的范围有限,所以采用数组和偏移来实现,也可以用map实现。

class Solution { public: int longestSubsequence(vector<int>& arr, int difference) { vector<int> dp(20005,0); //dp[i]表示以i结尾的序列最大长度,默认为1,偏差是10000 int A=1; for(int i=0;i<arr.size();i++){ dp[arr[i]+10000] = 1; if(arr[i]-difference>=-10000 && arr[i]-difference<=10000){ printf("%d %d\n",arr[i]+10000,arr[i]-difference+10000); dp[arr[i]+10000]=max(dp[arr[i]+10000],dp[arr[i]-difference+10000]+1); } A = max(A,dp[arr[i]+10000]); // printf("%d\n",A); } return A; } };
最新回复(0)