ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা আছে, আমাদের দীর্ঘতম পাটিগণিত অনুসারির দৈর্ঘ্য বের করতে হবে। যেহেতু আমরা জানি একটি ক্রম S[i] হল একটি পাটিগণিত ক্রম যখন S[i+1] - S[i] রেঞ্জের প্রতিটি i-এর জন্য একই মান থাকে (0 ≤ i
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[1, 4, 7, 10, 13, 20, 16], তাহলে আউটপুট হবে 6, পরবর্তী [1, 4, 7, 10, 13, 16] একটি পাটিগণিত কারণ প্রতিটি ধারাবাহিক উপাদানের মধ্যে পার্থক্য 3।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=arr এর আকার
- যদি n <=1 হয়, তাহলে
- রিটার্ন n
- res :=0
- dp :=একটি খালি মানচিত্র, ডিফল্টরূপে এটি 1 সংরক্ষণ করবে যখন কী পাওয়া যাবে না
- 1 থেকে n - 1 রেঞ্জের জন্য, করুন
- 0 থেকে i - 1 রেঞ্জের মধ্যে j-এর জন্য
- করুন
- diff :=arr[i] - arr[j]
- dp[i, diff] :=dp[j, diff] + 1
- res :=res এর সর্বোচ্চ এবং dp[i, diff
- করুন
- রিটার্ন রিটার্ন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from collections import defaultdict class Solution: def solve(self, arr): n = len(arr) if n <= 1: return n res = 0 dp = defaultdict(lambda: 1) for i in range(1, n): for j in range(i): diff = arr[i] - arr[j] dp[i, diff] = dp[j, diff] + 1 res = max(res, dp[i, diff]) return res ob = Solution() nums = [1, 4, 7, 10, 13, 20, 16] print(ob.solve(nums))
ইনপুট
[1, 4, 7, 10, 13, 20, 16]
আউটপুট
6