Giả sử chúng ta có một mảng A gồm các số nguyên, chúng ta phải trả về độ dài của dãy con số học dài nhất trong A. Như bạn biết rằng dãy con A là danh sách A [i_1], A [i_2], ..., A [ i_k] với 0 <=i_1
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
Tạo bản đồ dp, n:=size của A, đặt ret:=2
cho tôi trong phạm vi từ 0 đến n - 1
cho j trong phạm vi 0 đến i - 1
diff:=A [j] - A [i]
dp [i, diff]:=1 + dp [j, diff]
ret:=max of 1 + dp [i, diff] và ret
trả lại ret
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int longestArithSeqLength(vector<int>& A) {
unordered_map <int, unordered_map <int, int> > dp;
int n = A.size();
int ret = 2;
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
int diff = A[j] - A[i];
dp[i][diff] = 1 + dp[j][diff];
ret = max(1 + dp[i][diff], ret);
}
}
return ret;
}
};
main(){
vector<int> v1 = {9,4,7,2,10};
Solution ob;
cout << (ob.longestArithSeqLength(v1));
}
Đầu vào
[9,4,7,2,10]
Đầu ra
3