ধরুন আমাদের কাছে পূর্ণসংখ্যার মানের চারটি তালিকা 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