मान लीजिए कि हमारे पास एक एरे ए है, हमें एक संख्या एक्स ढूंढनी है जैसे कि (ए [0] एक्सओआर एक्स) + (ए [1] एक्सओआर एक्स) + … + ए [एन – 1] एक्सओआर एक्स जितना संभव हो उतना न्यूनतम है।
इसलिए, यदि इनपुट [3, 4, 5, 6, 7] जैसा है, तो आउटपुट एक्स =7, योग =10 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें search_res() । इसमें गिरफ्तारी होगी, n
- तत्व:=गिरफ्तारी[0]
- मैं के लिए 0 से लेकर गिरफ्तारी के आकार तक, करते हैं
- अगर गिरफ्तारी [i]> तत्व, तो
- तत्व:=गिरफ्तारी[i]
- अगर गिरफ्तारी [i]> तत्व, तो
- p :=का पूर्णांक (तत्व आधार 2 का लघुगणक) + 1
- X :=0
- 0 से p की श्रेणी में i के लिए, करें
- सीएनटी:=0
- जे के लिए 0 से n की सीमा में, करें
- अगर arr[j] AND (2^i) शून्य नहीं है, तो
- सीएनटी:=सीएनटी + 1
- अगर arr[j] AND (2^i) शून्य नहीं है, तो
- यदि cnt> (n / 2) का पूर्णांक भाग शून्येतर है, तो
- X :=X + (2^i)
- योग :=0
- मैं के लिए 0 से n की सीमा में, करते हैं
- योग :=योग +(X XOR arr[i])
- X और योग लौटाएं
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import log2
def search_res(arr, n):
element = arr[0]
for i in range(len(arr)):
if(arr[i] > element):
element = arr[i]
p = int(log2(element)) + 1
X = 0
for i in range(p):
cnt = 0
for j in range(n):
if (arr[j] & (1 << i)):
cnt += 1
if (cnt > int(n / 2)):
X += 1 << i
sum = 0
for i in range(n):
sum += (X ^ arr[i])
print("X =", X, ", Sum =", sum)
arr = [3, 4, 5, 6, 7]
n = len(arr)
search_res(arr, n) इनपुट
[3, 4, 5, 6, 7]
आउटपुट
X = 7 , Sum = 10