मान लीजिए हमारे पास दो पूर्णांक N और K हैं; हमें N अद्वितीय मान ढूंढने हैं जिनका बिटवाइज OR, K के समान है। यदि ऐसा कोई परिणाम नहीं है, तो -1 वापस करें।
तो, यदि इनपुट N = 4 और K = 6 की तरह है, तो आउटपुट [6,0,1,2] होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
MAX := 32
visited := MAX आकार की एक सूची और False से भरें
res := एक नई सूची
एक फ़ंक्शन add() परिभाषित करें। यह num लेगा
point := 0
value := 0
i के लिए 0 से MAX की सीमा में, करें
यदि visited[i] शून्येतर है, तो
अगले पुनरावृत्ति के लिए जाएं
अन्यथा,
यदि num AND 1 शून्येतर है, तो
value := value + (2^i)
num := num/2 (केवल पूर्णांक भाग लें)
res के अंत में value डालें
मुख्य विधि से, निम्नलिखित करें -
pow2 := 2^0 से 2^31 तक 2 की घात की एक सरणी
res के अंत में k डालें
cnt_k := k में बिट्स की संख्या
यदि pow2[cnt_k] < n, तो
-1 वापस करें
count := 0
i के लिए 0 से pow2[cnt_k] - 1 की सीमा में, करें
add(i)
count := count + 1
यदि count, n के समान है, तो
लूप से बाहर निकलें
res वापस करें
उदाहरण
बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
MAX = 32 visited = [False for i in range(MAX)] res = [] def set_bit_count(n): if (n == 0): return 0 else: return (n & 1) + set_bit_count(n >> 1) def add(num): point = 0 value = 0 for i in range(MAX): if (visited[i]): continue else: if (num & 1): value += (1 << i) num = num//2 res.append(value) def solve(n, k): pow2 = [2**i for i in range(MAX)] res.append(k) cnt_k = set_bit_count(k) if (pow2[cnt_k] < n): return -1 count = 0 for i in range(pow2[cnt_k] - 1): add(i) count += 1 if (count == n): break return res n = 4 k = 6 print(solve(n, k))
इनपुट
4, 6
आउटपुट
[6, 0, 1, 2]