কম্পিউটার

পাইথনে একক সংখ্যা II


ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি অ-খালি বিন্যাস রয়েছে, প্রতিটি উপাদান একটি ছাড়া তিনবার উপস্থিত হয়, যা ঠিক একবার প্রদর্শিত হয়। আমাদের একটি একক উপাদান খুঁজে বের করতে হবে। সুতরাং যদি অ্যারে [2,2,3,2] হয় তাহলে আউটপুট হবে 3.

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • অ্যারে থেকে উপাদানগুলির পরম মান নিয়ে সর্বাধিক সংখ্যাটি সন্ধান করুন এবং এটিকে max_num এ সংরক্ষণ করুন

  • max_bits :=পূর্ণসংখ্যা (লগ সর্বোচ্চ_সংখ্যা বেস 2) + 2

  • list1 :=max_bits আকারের একটি খালি তালিকা এবং যার উপাদান 0

  • প্রতিটি সংখ্যার জন্য −

    • অবস্থান :=0

    • যখন সংখ্যা 0 নয় এবং pos

      • যদি না বিজোড় হয়, তাহলে list1[pos] 1

        দ্বারা বাড়ান
      • n :=n / 2 এবং pos বাড়ান 1

  • আমি 0 থেকে max_bits

    পরিসরে
    • list1[i] :=list1[i] mod 3

  • pos :=0, res :=0

  • আমি পরিসীমা max_bits

    এর জন্য
    • যদি list1[i] 0 না হয়, তাহলে ফলাফল :=ফলাফল + 2^pos

    • pos :=pos + 1

  • তালিকা1[max_bits - 1] যদি 1 হয়, তাহলে res :=-(2^max_bits - res)

  • রিটার্ন রিটার্ন

উদাহরণ (পাইথন)

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

import math
class Solution(object):
   def singleNumber(self, nums):
      max_num = max(map(abs, nums))
      max_bits = (int)(math.log(max_num,2)) + 2
      list1 = [0 for i in range(max_bits)]
      for no in nums:
         pos = 0
         while (no != 0 and pos < max_bits):
            if (no & 1 != 0):
               list1[pos] += 1
            no >>= 1
            pos += 1
      for i in range(max_bits):
         list1[i] %= 3
      pos = 0
      result = 0
      for i in range(max_bits):
         if (list1[i] != 0):
            result += (2 ** pos)
         pos += 1
      print (list1, max_bits)
      if (list1[max_bits - 1] == 1):
         result = -(2 ** max_bits - result)
      return (result)
ob = Solution()
print(ob.singleNumber([2,2,3,2]))

ইনপুট

[2,2,3,2]

আউটপুট

[1, 1, 0] 3
3

  1. পাইথনে প্যালিনড্রোম নম্বর

  2. পাইথনে বিপরীত পূর্ণসংখ্যা

  3. পাইথনে ফ্যাক্টোরিয়াল()

  4. পাইথনে এলোমেলো সংখ্যা