मान लीजिए कि हमारे पास दो सरणियाँ हैं nums1 और nums2 , हमें इन दो नियमों का पालन करते हुए गठित ट्रिपलेट्स (टाइप 1 और टाइप 2) का पता लगाना है -
- ट्रिपलेट (i, j, k) यदि nums1[i]^2 =nums2[j] * nums2[k] जहां [0 <=i
- ट्रिपलेट (i, j, k) यदि nums2[i]^2 =nums1[j] * nums1[k] जहां [0 <=i
- ट्रिपलेट (i, j, k) यदि nums2[i]^2 =nums1[j] * nums1[k] जहां [0 <=i
इसलिए, यदि इनपुट nums1 =[7,4] nums2 =[5,2,8,9] जैसा है, तो आउटपुट 1 होगा क्योंकि टाइप 1, (1,1,2), nums1 का ट्रिपलेट है। [1] ^ 2 =अंक 2 [1] * अंक 2 [2] =(16 =2 * 8)।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- cnt1 :=प्रत्येक तत्व और उसकी संख्या 1 को रखने के लिए एक नक्शा
- cnt2 :=प्रत्येक तत्व और उसकी संख्या 2 को पकड़ने के लिए एक नक्शा
- एक फंक्शन ट्रिपलेट्स() को परिभाषित करें। इसमें arr1, arr2 लगेगा
- उत्तर:=0
- प्रत्येक t के लिए, v arr1 के आइटम () में, करते हैं
- k :=arr2[t] अगर यह वहां है, अन्यथा 0
- tmp :=k*(k - 1) / 2
- वर्ग:=टी * टी
- गिरफ्तारी 2 में प्रत्येक मीटर के लिए
- यदि m
- tmp:=tmp + (arr2[m] अगर यह वहां है, अन्यथा 0) * (arr2[sq/m का भागफल] अगर यह वहां है, अन्यथा 0)
- यदि m
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें-
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))
इनपुट
[7,4],[5,2,8,9]
आउटपुट
2