Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ลำดับเลขคณิตที่ยาวที่สุดใน C++


สมมติว่าเรามีอาร์เรย์ A ของจำนวนเต็ม เราต้องคืนค่าความยาวของลำดับย่อยเลขคณิตที่ยาวที่สุดใน A ดังที่คุณทราบแล้วว่าลำดับย่อยของ A คือรายการ A[i_1], A[i_2], ..., A[ i_k] ด้วย 0 <=i_1

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • สร้างแผนที่ dp, n :=size of A, set ret :=2

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • สำหรับ j ในช่วง 0 ถึง i – 1

      • diff :=A[j] – A[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