কম্পিউটার

পাইথনে 4 যোগফল II


ধরুন আমাদের কাছে পূর্ণসংখ্যার মানের চারটি তালিকা 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]
  • কাউন্টার :=0
  • প্রতিটি উপাদানের জন্য আমি C
    • D
        -এ j প্রতিটি উপাদানের জন্য
      • যদি (-1)*(i + j) যোগফল হয়, তাহলে counter :=counter + sums[-1 * (i + j)]
  • রিটার্ন কাউন্টার

উদাহরণ

আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −

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

  1. issuperset() পাইথনে

  2. কলযোগ্য() পাইথনে

  3. পাইথনে আন্ডারস্কোর(_)

  4. পাইথনে কুইন