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

ลำดับเลขคณิตที่ยาวที่สุดของความแตกต่างที่กำหนดใน C++


สมมติว่าเรามีอาร์เรย์จำนวนเต็ม arr และผลต่างของจำนวนเต็ม เราต้องหาความยาวของลำดับย่อยที่ยาวที่สุดใน arr ซึ่งเป็นลำดับเลขคณิตเพื่อให้ความแตกต่างระหว่างองค์ประกอบที่อยู่ติดกันในลำดับต่อมา ก็เหมือนกับความแตกต่าง ดังนั้นหากอินพุตเป็นเหมือน [1,5,7,8,5,3,4,2,1] และผลต่างคือ -2 แล้วผลลัพธ์จะเป็น − 4 เนื่องจากลำดับเลขคณิตที่ยาวที่สุดคือ [7,5, 3,1]

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

  • กำหนดแผนที่ m
  • n :=ขนาดของอาร์เรย์ arr ตั้งค่าเป็น :=0
  • สำหรับ i ในช่วง 0 ถึง n – 1
    • x :=arr[i]
    • m[x] :=1 + m[x - d]
    • ans :=สูงสุดของและ m[x]
  • คืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −

#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