• Leetcode: Maximum XOR of Two Numbers in an Array


    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231.
    
    Find the maximum result of ai XOR aj, where 0 ≤ i, j < n.
    
    Could you do this in O(n) runtime?
    
    Example:
    
    Input: [3, 10, 5, 25, 2, 8]
    
    Output: 28
    
    Explanation: The maximum result is 5 ^ 25 = 28.

    Solution 1: Bit Manipulation:

    这题真心有点难,get the max XOR bit by bit

    note that if A^B=C, then A^C=B, B^C=A

     1 public class Solution {
     2     public int findMaximumXOR(int[] nums) {
     3         int mask = 0, max = 0;
     4         for (int i=31; i>=0; i--) {
     5             mask |= 1<<i;
     6             HashSet<Integer> prefixes = new HashSet<Integer>();
     7             for (int each : nums) {
     8                 prefixes.add(each & mask); // reserve Left bits and ignore Right bits
     9             }
    10             int tmpMax = max | (1<<i);   
    11             //possible new max, for example: max right now is 11000, then tmpMax=11100, max is 11100, tmpMax is 11110
    12             for (int prefix : prefixes) {
    13                 if (prefixes.contains(tmpMax^prefix)) 
    14                     max = tmpMax;
    15             }
    16         }
    17         return max;
    18     }
    19 }        

    Solution 2: Trie, (未研究)

    https://discuss.leetcode.com/topic/63207/java-o-n-solution-using-trie

    https://discuss.leetcode.com/topic/64753/31ms-o-n-java-solution-using-trie

  • 相关阅读:
    RESTful API 设计原则
    c#的逆变和协变
    Java内部类之间的闭包和回调详解
    java的内部类
    抓包工具
    HashMap与HashTable的区别
    Java 语法清单
    Java面试问题列表
    bootstrap table api
    c# CacheManager 缓存管理
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6132593.html
Copyright © 2020-2023  润新知