Skip to content

Commit

Permalink
Update Readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wisdompeak authored Jul 19, 2021
1 parent 88341d3 commit c1dee55
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion Trie/1938.Maximum-Genetic-Difference-Query/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

本题的题意是:给出一棵树。对于query(node, val),我们需要在从node到root的路径中,找一个节点的nodeVal,使得val^nodeVal的结果最大。

在一堆数nums里面挑一个数,使得其与指定的一个数a的XOR值最大,是一个老题,参见```1707.Maximum-XOR-With-an-Element-From-Array```。具体的做法是将nums里面的数都写成32位的二进制串,然后拼接成一棵前缀树。基于a的二进制表达式,我们尽量沿着二叉树向下走,每一位都尽量相对于a取反。这样一路走下来得到的数b,就是a^b最大的结果。
在一堆数nums里面挑一个数,使得其与指定的一个数a的XOR值最大,是一个老题,参见```421.Maximum-XOR-of-Two-Numbers-in-an-Array```。具体的做法是将nums里面的数都写成32位的二进制串,然后拼接成一棵前缀树。基于a的二进制表达式,我们尽量沿着二叉树向下走,每一位都尽量相对于a取反。这样一路走下来得到的数b,就是a^b最大的结果。

对于本题,因为query的数量太多,显然我们不会对每个query都重新建一棵Trie。我们发现,对于同一个路径上的节点A->B->C...,它们的Trie只会彼此相差一条支链。这让我们想到了从上往下的DFS。从根节点按深度优先遍历所有的支路,每深入一个节点,就把该节点的值加入Trie(即Trie增加了一条新支链),这样就最大程度地利用了已有的Trie。这样对于query(A,val), query(B,val), query(C,val) .... 这些结果,都可以在DFS的过程中一并得到解决。

Expand Down

0 comments on commit c1dee55

Please sign in to comment.