একটি ইউনিক সংখ্যার লিস্ট nums দেওয়া আছে। এমন সবচেয়ে বড় সাবসেট খুঁজে বের করতে হবে যাতে সেটির যেকোনো দুটি এলিমেন্ট (i, j) এর জন্য i%j==0 বা j%i==0 সত্য হয়। সাবসেটের আকার রিটার্ন করুন।
উদাহরণস্বরূপ, nums = [3, 6, 12, 24, 26, 39] হলে আউটপুট ৪, কারণ [3, 6, 12, 24] সবচেয়ে বড় বৈধ সাবসেট।
সমাধানের পদ্ধতি (DP on সর্টেড অ্যারে)
numsসর্ট করুন।dp[i]=nums[i]দিয়ে শেষ হওয়া সবচেয়ে বড় বৈধ সাবসেটের আকার। সব ১ দিয়ে ইনিশিয়ালাইজ।i = 1..n-1,j = 0..i-1:- যদি
nums[i] % nums[j] == 0:dp[i] = max(dp[i], dp[j] + 1)।
- যদি
max(dp)রিটার্ন করুন।
পাইথন কোড উদাহরণ
class Solution:
def solve(self, nums):
dp = [1] * len(nums)
nums.sort()
n = len(nums)
if n <= 1:
return n
ans = 0
for i in range(1, n):
for j in range(i):
if nums[i] % nums[j] == 0:
dp[i] = max(dp[i], dp[j] + 1)
ans = max(ans, dp[i])
return ans
ob = Solution()
nums = [3, 6, 12, 24, 26, 39]
print(ob.solve(nums))
ইনপুট
[3, 6, 12, 24, 26, 39]
আউটপুট
4