• 0421. Maximum XOR of Two Numbers in an Array (M)


    Maximum XOR of Two Numbers in an Array (M)

    题目

    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.
    

    题意

    在数组中选取两个数进行异或,求能够得到的最大值。

    思路

    解题需要用到异或的性质:x^b=a => xbb=a^b => a^b=x。为了得到最大值,应使最终结果ans的高位尽可能为1。从第32位向第1位遍历,每次取出所有数到当前位的前缀,存入到HashSet中;x由上一次遍历得到的ans将当前位设为1得到,将x与任意一个前缀b异或,如果得到的结果a也在HashSet中,说明存在两个前缀异或能够得到x,因此ans当前位确实为1,用x更新ans,否则ans保持不变(即当前位保持为1)。可以看到每次遍历的作用是确定了最终数在相应位是0还是1。


    代码实现

    Java

    class Solution {
        public int findMaximumXOR(int[] nums) {
            int ans = 0;
            int mask = 0;
            for (int i = 31; i >= 0; i--) {
                Set<Integer> set = new HashSet<>();
                mask |= 1 << i;
                for (int num : nums) {
                    int prefix = mask & num;
                    int tmp = (1 << i) | ans;
                    if (set.contains(tmp ^ prefix)) {
                        ans = tmp;
                        break;
                    }
                    set.add(prefix);
                }
            }
            return ans;
        }
    }
    
  • 相关阅读:
    PHP mysqli_sqlstate() 函数
    修改用户家目录
    mysql 我的学习
    mysql 表空间
    mysql cluster 运行的必备条件
    浅谈mysql集群
    RBAC权限管理
    mysql 恢复备份
    oracle10G/11G官方下载地址集合 直接迅雷下载
    MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持
  • 原文地址:https://www.cnblogs.com/mapoos/p/13681811.html
Copyright © 2020-2023  润新知