經典題目 最大異或對 二進位制與Trie樹

2021-10-23 08:55:46 字數 1433 閱讀 3714

題目鏈結

如果按照暴力的方法,進行兩次迴圈可以解決:

for i in

range

(n):

for j in

range

(i+1

, n)

: ans =

max(ans,nums[i]

^nums[j]

)

這樣操作的時間複雜度為o(n

)o(n)

o(n)

還可以轉化為二進位制的問題,進而用trie樹解決。我們從最高位開始進行選擇,盡量選擇與目前這個數不同的位,這樣可以保證異或最大。

class

trie

:def

__init__

(self)

: self.dic =

defadd

(self, x)

: dic = self.dic

i =30while i >=0:

cur =

(x>>i)&1

if cur not

in dic:

dic[cur]

= dic = dic[cur]

i -=

1def

query

(self, x)

: dic = self.dic

i =30 ans =

0while i >=0:

cur =

(x>>i)&1

if1-cur in dic:

dic = dic[

1-cur]

#ans = ans * 2 + 1-cur

ans +=

1<

else

:#ans = ans * 2 + cur

dic = dic[cur]

i -=

1return ans

n =int

(input()

)good =

list

(map

(int

,input()

.split())

)tree = trie(

)max_ =

0for i in

range

(n):

tree.add(good[i]

)# 先插入,可以避免判斷空樹

ans = tree.query(good[i]

) max_ =

max(max_, ans)

print

(max_)

二進位制 位與 或 使用

平時開發是狀態判斷比較麻煩,有時資料庫可能會設定多個欄位或乙個字段多個值來滿足要求。管理維護太繁瑣,最近專案中需要判斷業務流程執行狀態,我們就用二進位制位 8位 來設定流程的狀態。當然上述所說與標題裡的位與 或 沒多大關係,接下來慢慢分析二進位制位與 或 如何使用者許可權管理。假如 1 許可權1 2...

t070 二進位制

time limit 1 second memory limit 128 mb 問題描述 求所有可以只用1和00拼成的長度為n的二進位制數的個數除以15746的餘數。比如當n 4的時候,有5個可能的二進位制數 0011,0000,1001,1100,1111。資料範圍 1 n 1000000 輸入格...

題目1473 二進位制數

時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 10519 解決 3030 題目描述 大家都知道,資料在計算機裡中儲存是以二進位制的形式儲存的。有一天,小明學了c語言之後,他想知道乙個型別為unsigned int 型別的數字,儲存在計算機中的二進位制串是什麼樣子的。你能幫幫小明嗎?並...