[leetcode 数位运算] 2939. 最大异或乘积 M

给你三个整数 a ,b 和 n ,请你返回 (a XOR x) * (b XOR x) 的 最大值 且 x 需要满足 0 <= x < 2n。

由于答案可能会很大,返回它对 109 + 7 取余 后的结果。

注意,XOR 是按位异或操作。

示例 1:

输入:a = 12, b = 5, n = 4

输出:98

解释:当 x = 2 时,(a XOR x) = 14 且 (b XOR x) = 7 。所以,(a XOR x) * (b XOR x) = 98 。

98 是所有满足 0 <= x < 2n 中 (a XOR x) * (b XOR x) 的最大值。

示例 2:

输入:a = 6, b = 7 , n = 5

输出:930

解释:当 x = 25 时,(a XOR x) = 31 且 (b XOR x) = 30 。所以,(a XOR x) * (b XOR x) = 930 。

930 是所有满足 0 <= x < 2n 中 (a XOR x) * (b XOR x) 的最大值。

示例 3:

输入:a = 1, b = 6, n = 3

输出:12

解释: 当 x = 5 时,(a XOR x) = 4 且 (b XOR x) = 3 。所以,(a XOR x) * (b XOR x) = 12 。

12 是所有满足 0 <= x < 2n 中 (a XOR x) * (b XOR x) 的最大值。

提示:

0 <= a, b < 250

0 <= n <= 50

java 复制代码
class Solution {
    public int maximumXorProduct(long a, long b, int n) {
        if(a < b) {
            a = a ^ b;
            b = a ^ b;
            a = a ^ b;
        }
        long MOD = (int)1e9+7;
        long mask = (1L<<n)-1; // n个1
        long ax = a & ~mask; // 没办法通过 xor x 修改的部分
        long bx = b & ~mask;

        a &= mask; // 保留低于n的比特位
        b &= mask;
        long left = a ^ b; // 一个是0 一个是1 的比特位
        long one = mask ^ left; // 全为 1 或者 全为0 的比特位
        ax |= one; // 异或结果一定是1先加到结果
        bx |= one;
        if(left > 0 && ax == bx) {
            // left 的最高位给ax 其余给bx
            long high_bit = 1L << (63 - Long.numberOfLeadingZeros(left));
            ax |= high_bit;
            left ^= high_bit;
        }
        bx |= left;
        return (int) (ax % MOD * (bx % MOD) % MOD);

    }
}
相关推荐
安然无虞2 分钟前
31天Python入门——第17天:初识面向对象
后端·爬虫·python·职场和发展
程序员小远15 分钟前
Python+requests实现接口自动化测试框架
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
xyliiiiiL20 分钟前
二分算法到红蓝染色
java·数据结构·算法
珹洺2 小时前
C++从入门到实战(十)类和对象(最终部分)static成员,内部类,匿名对象与对象拷贝时的编译器优化详解
java·数据结构·c++·redis·后端·算法·链表
写bug的小屁孩2 小时前
移动零+复写零+快乐数+盛最多水的容器+有效三角形的个数
c++·算法·双指针
飞川撸码2 小时前
【LeetCode 热题100】208:实现 Trie (前缀树)(详细解析)(Go语言版)
算法·leetcode·golang·图搜索算法
这就是编程3 小时前
自回归模型的新浪潮?GPT-4o图像生成技术解析与未来展望
人工智能·算法·机器学习·数据挖掘·回归
羑悻的小杀马特3 小时前
【狂热算法篇】探寻图论幽径:Bellman - Ford 算法的浪漫征程(通俗易懂版)
c++·算法·图论·bellman_ford算法
Fantasydg6 小时前
DAY 31 leetcode 142--链表.环形链表
算法·leetcode·链表
basketball6166 小时前
C++ STL常用算法之常用排序算法
c++·算法·排序算法