其他分享
首页 > 其他分享> > 每天一道力扣题:数组中两个数的最大异或值

每天一道力扣题:数组中两个数的最大异或值

作者:互联网

业精于勤,荒于嬉; 行成于思,毁于随。

题干

给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。

示例1:
输入:nums = [3,10,5,25,2,8]
输出:28
解释:最大运算结果是 5 XOR 25 = 28.

示例2:
输入:nums = [0]
输出:0

示例3:
输入:nums = [2,4]
输出:6

示例4:
输入:nums = [8,10,2]
输出:10

示例5:
输入:nums = [14,70,53,83,49,91,36,80,92,51,66,70]
输出:127

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/


思路

前提:二进制下,希望一个数尽可能大,即希望越高位上越能够出现“1”,这样这个数就是所求的最大数,这是贪心算法的思想。即我们选择的两个数异或要尽可能让高位为1。

!!!核心:尽可能多的高位为1。


题解

代码

class Solution:
    def findMaximumXOR(self, nums: List[int]) -> int:
        res = 0
        max_len = len(bin(max(nums))) - 2
        for i in range(max_len - 1, -1, -1):
            cur = 1 << i
            res |= cur
            d = {}
            find = 0
            for num in nums:
                d[num & res] = 1
                if (num & res) ^ res in d:
                    find = 1
                    break
            if not find:
                res ^= 1 << i
        return res

结果统计

在这里插入图片描述

标签:高位,示例,res,nums,力扣题,异或,num,数组
来源: https://blog.csdn.net/I_am_Tony_Stark/article/details/116891094