দুটি অ্যারে nums1 এবং nums2 দেওয়া থাকলে, আমাদের দুটি ধরনের ট্রিপলেট খুঁজে বের করতে হবে:
ট্রিপলেটের ধরন:
- প্রकार ১: ট্রিপলেট (i, j, k) যেখানে
nums1[i]² = nums2[j] * nums2[k]এবং0 ≤ i < nums1.length,0 ≤ j < k < nums2.length - প্রकार ২: ট্রিপলেট (i, j, k) যেখানে
nums2[i]² = nums1[j] * nums1[k]এবং0 ≤ i < nums2.length,0 ≤ j < k < nums1.length
উদাহরণ:
ইনপুট: nums1 = [7,4], nums2 = [5,2,8,9]
আউটপুট: 1 কারণ টাইপ ১ ট্রিপলেট (1,1,2) আছে: nums1[1]² = 16 = nums2[1] * nums2[2] = 2*8
সমাধানের পদ্ধতি:
- প্রতিটি অ্যারের উপাদান এবং তাদের ফ্রিকোয়েন্সি সংরক্ষণ করার জন্য দুটি ম্যাপ (Counter) তৈরি করুন:
cnt1এবংcnt2 - একটি হেল্পার ফাংশন
triplets(arr1, arr2)ডিফাইন করুন যা: ans = 0আরম্ভ করুনarr1-এর প্রতিটি উপাদানtএবং তার কাউন্টvজন্য:k = arr2.get(t, 0)(যদিtarr2-এ থাকে)tmp = k*(k-1)/2(একই মানদ্বয় থেকে জোড়া বানানোর সংখ্যা)sq = t*tarr2-এর প্রতিটিmজন্য যদিm < tএবংsq % m == 0হয়, তবেtmp += arr2.get(m,0) * arr2.get(sq//m, 0)ans += tmp * vansরিটার্ন করুন- ফাইনাল আউটপুট:
triplets(cnt1, cnt2) + triplets(cnt2, cnt1)
পাইথন কোড:
from collections import Counter
def solve(nums1, nums2):
cnt1 = Counter(nums1)
cnt2 = Counter(nums2)
def triplets(arr1, arr2):
ans = 0
for t, v in arr1.items():
k = arr2.get(t, 0)
tmp = k * (k - 1) // 2
sq = t * t
for m in arr2:
if m < t and sq % m == 0:
tmp += arr2.get(m, 0) * arr2.get(sq // m, 0)
ans += tmp * v
return ans
return triplets(cnt1, cnt2) + triplets(cnt2, cnt1)
nums1 = [7,4]
nums2 = [5,2,8,9]
print(solve(nums1, nums2)) # আউটপুট: 2
টেস্ট কেস:
ইনপুট: [7,4],[5,2,8,9]
আউটপুট: 2