ধরুন আমাদের কাছে পূর্ণসংখ্যার মানের চারটি তালিকা A, B, C, D আছে, আমাদের গণনা করতে হবে কয়টি টিপল (i, j, k, l) আছে এমন A[i ] + B[j] + C[k] + D[l] শূন্য। বিবেচনা করুন সমস্ত A, B, C, D-এর একই দৈর্ঘ্য N যেখানে 0 ≤ N ≤ 500। মনে রাখবেন সমস্ত পূর্ণসংখ্যা -228 থেকে 228 - 1-এর মধ্যে রয়েছে এবং ফলাফল সর্বাধিক 231 - 1 হবে নিশ্চিত। তাই যদি ইনপুটগুলি হল A =[1, 2], B =[-2, -1], C =[-1, 2], D =[0, 2], তাহলে আউটপুট হবে 2। কারণ সেখানে আছে। দুটি টিপল, তারা হল (0, 0, 0, 1) তাই A[0] + B[0] + C[0] + D[1] =1 + (-2) + (-1) + 2 =0 , এবং আরেকটি টিপল হল (1, 1, 0, 0), A[1] + B[1] + C[0] + D[0] =2 + (-1) + (-1) + 0 =0
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- সমস্য নামে একটি মানচিত্র তৈরি করুন
- প্রতিটি উপাদানের জন্য আমি A
- এ
- B
- -এ j প্রতিটি উপাদানের জন্য
- যদি i + j যোগফলের মানচিত্রে না থাকে, তাহলে যোগফল [i + j] :=1 সেট করুন
- অন্যথায় যোগফলের মান বাড়ান[i + j]
- B
- কাউন্টার :=0
- প্রতিটি উপাদানের জন্য আমি C
- এ
- D
- -এ j প্রতিটি উপাদানের জন্য
- যদি (-1)*(i + j) যোগফল হয়, তাহলে counter :=counter + sums[-1 * (i + j)]
- D
- রিটার্ন কাউন্টার
উদাহরণ
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
class Solution(object):
def fourSumCount(self, A, B, C, D):
sums ={}
for i in A:
for j in B:
if i+j not in sums:
sums[i+j] = 1
else:
sums[i+j] +=1
counter = 0
for i in C:
for j in D:
if -1 * (i+j) in sums:
#print(-1 * (i+j))
counter+=sums[-1*(i+j)]
return counter
ob1 = Solution()
print(ob1.fourSumCount([1,2], [-2,-1], [-1,2], [0,2])) ইনপুট
[1,2] [-2,-1] [-1,2] [0,2]
আউটপুট
2