美文网首页
Maximum XOR of Two Numbers in an

Maximum XOR of Two Numbers in an

作者: BLUE_fdf9 | 来源:发表于2018-09-21 01:04 被阅读0次

    题目
    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?

    答案

    这题感觉像是利用xor性质的贪心算法
    通过依次判断max的第31位, 第30位, ..., 第0位是否可以为1来实现。

    class Solution {
        public int findMaximumXOR(int[] nums) {
            int mask = 0, max = 0;
            for(int i = 31; i >= 0; i--) {
                Set<Integer> set = new HashSet<>();
                mask = mask | (1 << i);
                for(int a : nums) {
                    set.add(mask & a);
                }
                
                int temp_mask = max | (1 << i);
                for(int a : set) {
                    int b = a ^ temp_mask;
                    if(set.contains(b)) {
                        max = temp_mask;
                        break;
                    }
                }
            }
            return max;
        }
    }
    

    相关文章

      网友评论

          本文标题:Maximum XOR of Two Numbers in an

          本文链接:https://www.haomeiwen.com/subject/hnbonftx.html