मान लीजिए कि हमारे पास पूर्णांकों की एक गैर-रिक्त सरणी है, प्रत्येक तत्व एक को छोड़कर तीन बार प्रकट होता है, जो ठीक एक बार प्रकट होता है। हमें एक ही तत्व खोजना है। तो अगर ऐरे [2,2,3,2] है तो आउटपुट 3 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सरणी से तत्वों का निरपेक्ष मान लेकर अधिकतम संख्या ज्ञात करें और इसे max_num में संग्रहीत करें
-
max_bits :=पूर्णांक (लॉग मैक्स_नम आधार 2) + 2
-
list1 :=max_bits आकार की एक खाली सूची और जिनके तत्व 0
. हैं -
अंकों में प्रत्येक अंक के लिए -
-
स्थिति :=0
-
जबकि संख्या 0 और पॉज़ नहीं है
-
अगर कोई विषम नहीं है, तो list1[pos] को 1 से बढ़ाएं
-
n :=n / 2 और स्थिति को 1 से बढ़ाएँ
-
-
-
मेरे लिए 0 से लेकर max_bits तक
-
सूची 1 [i]:=सूची 1 [i] मोड 3
-
-
स्थिति :=0, रेस :=0
-
मेरे लिए max_bits की सीमा में
-
अगर list1[i] 0 नहीं है, तो परिणाम:=परिणाम + 2^pos
-
स्थिति :=स्थिति + 1
-
-
अगर list1[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