मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी ए है, हमें ए में सबसे लंबे अंकगणितीय अनुक्रम की लंबाई वापस करनी होगी। जैसा कि आप जानते हैं कि ए का एक क्रम एक सूची ए [i_1], ए [i_2], ..., ए [ है। i_k] 0 के साथ <=i_1
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक नक्शा बनाएं dp, n:=A का आकार, सेट रिट:=2
-
मैं के लिए 0 से n - 1 की सीमा में
-
j के लिए 0 से i - 1 की सीमा में
-
अंतर:=ए [जे] - ए [i]
-
dp[i, diff] :=1 + dp[j, diff]
-
ret :=अधिकतम 1 + dp[i, diff] और ret
-
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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)); }
इनपुट
[9,4,7,2,10]
आउटपुट
3