leetcode421 陣列中兩個數的最大異或值

2021-10-06 14:54:04 字數 1128 閱讀 6536

給定乙個非空陣列,陣列中元素為 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。

找到 ai 和aj 最大的異或 (xor) 運算結果,其中0 ≤ i, j < n 。

你能在o(n)的時間解決這個問題嗎?

示例:

輸入:[3

,10,5

,25,2

,8]輸出:

28解釋: 最大的結果是 5^25

=28.

構建乙個字典樹(深度是31,即二進位制數字的最高位數),首先遍歷陣列,生成該字典樹。生成方式:對於當前數字num,從高位向低位計算,如果(num>>i)&1=true,表示該位置是1,生成右子樹,反之生成左子樹。

注:遍歷陣列,時間為o(n),每個數字生成字典樹是常量時間(一共就31位),因此生成字典樹的時間複雜度為o(n)。

字典樹生成後,遍歷陣列;對於當前數字num,仍然從高位向低位計算(因為我們想讓異或結果最大, 因此應該從高位開始比較)。

注:字典樹是根據整個陣列生成的,因此root在字典樹中移動的時候,對應的是陣列中的某個數字,符合題意;

// 字典樹

struct trieroot

;class

solution

else}}

public

:int

findmaximumxor

(vector<

int>

& nums)

int res =

0, tmp =0;

trieroot * curnode = root;

// 計算每個數字在陣列中的最大異或值

for(

int i =

0; i < nums.

size()

++i)

else

curnode = curnode-

>right;

}else

else

curnode = curnode-

>left;}}

res =

max(res, tmp);}

return res;}}

;

LeetCode421 陣列中兩個數的最大異或值

目錄 一 題目描述 二 解題思路 三 實現 給定乙個非空陣列,陣列中元素為 a0,a1,a2,an 1,其中 0 ai 231 找到 ai 和aj 最大的異或 xor 運算結果,其中0 i,j n 你能在o n 的時間解決這個問題嗎?示例 輸入 3,10,5,25,2,8 輸出 28 解釋 最大的結...

421 陣列中兩個數的最大異或值

標籤 位運算 字典樹。題目 給你乙個整數陣列 nums 返回 nums i xor nums j 的最大運算結果,其中 0 i j n 高階 你可以在 o n 的時間解決這個問題嗎?輸入 nums 3 10,5 25,2 8 輸出 28 解釋 最大運算結果是 5 xor 25 28.輸入 nums ...

《疑問》Leetcode 陣列 兩數之和

題目 給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。你可以按任意順序返回答案。示例 1 輸入 nums 2,7,11,15 target 9 ...