排他的ORアレイの最大値leetcode-421- *二つの数字(プレフィックスツリー)

件名の説明:

 

 

この方法の一つ:

クラスのソリューション:
     DEF findMaximumXOR(セルフ、NUMS:リスト[INT]) - > int型:
        ルート =のTreeNode(-1 
        
        のための NUM NUMS:
            cur_node =ルート現在のノード
            
            のための I における範囲(0、32):               代表32ビット
                #の印刷NUM、<< 1(31は- I)、およびNUM(<< 1(31は- I)。)。
                IF NUM&(<< 1(31は- I))== 0:    現在位置の場合と演算の結果が1である場合、移動する左
                    IF  ないcur_node.left:
                        cur_node.left = ツリーノード(0)
                    cur_node= Cur_node.left
                 現在の位置や操作の結果が0であれば、どこへ行くか、右に回し
                    IF  ないcur_node.right:
                        cur_node.right =のTreeNode(1 
                    cur_node = cur_node.right 
            cur_node.left =のTreeNode(NUM)        中最後の葉ノードは、この数の値についての記録を残した
                    
        RES = 0
         のために NUM :NUMS 
            cur_node = 
            
             I における範囲(0、32 cur_node.val印刷、cur_node.leftは、cur_node.right 
                IF:== 0 NUM - &(I)<< 1(31)と      #のそれならば、計算結果が0である、右側のサブので、すぐに右に行くことができます図1は、このいずれかのように異なるツリーを表し、または1を取得する
                    のIF cur_node.right:           右に歩くことができる 
                        cur_node = cur_node.right #を右に行くために
                    、他#は右に行くことができない 
                        cur_node = cur_node.left Jiuwang行くために左に
                それ以外#の計算結果は、それらが残って行くことができるならば、左部分木は排他的になります0、または1を表しているので、あなたは、左に行く、1である
                    IF cur_node.left:            左に行くことができ 
                        cur_node = cur_node.left 左に行きます
                    #は左に行くことができない 
                        cur_node = cur_node.right 右に行き   
            TEMP = cur_node.left.val              このパスに保存されている番号の得られた値
                
            RES = MAX(RES、NUM ^ TEMP)           各リフレッシュはRESです最大
                
        リターン RES

 

おすすめ

転載: www.cnblogs.com/oldby/p/11619176.html