ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি অ-খালি বিন্যাস রয়েছে, প্রতিটি উপাদান একটি ছাড়া তিনবার উপস্থিত হয়, যা ঠিক একবার প্রদর্শিত হয়। আমাদের একটি একক উপাদান খুঁজে বের করতে হবে। সুতরাং যদি অ্যারে [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