【教3妹学编程-算法题】最大异或乘积

news2024/11/15 11:35:08

还是单身狗

3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定”
2哥 : 啥?18岁就当爹啦?
3妹:确切的说是14岁好吧。
2哥 : 哎,想我30了, 还是个单身狗。
3妹:别急啊, 2嫂肯定在某个地方等着你去娶她呢。又不是结婚越早越好。
2哥:是啊, 这孩子14岁当爹,也太早了。
3妹:2哥,你找女朋友有什么条件没有哇?
2哥 : emmm, 以前希望找一个温柔漂亮的, 现在嘛, 女的、活的。毕竟年龄已经很大了, 已经30了…
3妹:才30而已嘛, 女生很多都喜欢找个比自己大一点的~
2哥 : 哎,你们女生最大能接受比自己大多少岁啊?
3妹:emmm, 这么不好说,要看具体女生,一般大个3-5岁都可以吧。 2哥说到最大, 我今天看到一个最大异或乘积的题目,让我也来考考你吧~

考考你

题目:

给你三个整数 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 >= b
            long temp = a;
            a = b;
            b = temp;
        }

        long mask = (1L << n) - 1;
        long ax = a & ~mask; // 第 n 位及其左边,无法被 x 影响,先算出来
        long bx = b & ~mask;
        a &= mask; // 低于第 n 位,能被 x 影响
        b &= mask;

        long left = a ^ b; // 可分配:a XOR x 和 b XOR x 一个是 1 另一个是 0
        long one = mask ^ left; // 无需分配:a XOR x 和 b XOR x 均为 1
        ax |= one; // 先加到异或结果中
        bx |= one;

        // 现在要把 left 分配到 ax 和 bx 中
        // 根据基本不等式(均值定理),分配后应当使 ax 和 bx 尽量接近,乘积才能尽量大
        if (left > 0 && ax == bx) {
            // 尽量均匀分配,例如把 1111 分成 1000 和 0111
            long highBit = 1L << (63 - Long.numberOfLeadingZeros(left));
            ax |= highBit;
            left ^= highBit;
        }
        // 如果 a & ~mask 更大,则应当全部分给 bx(注意最上面保证了 a>=b)
        bx |= left;

        final long MOD = 1_000_000_007;
        return (int) (ax % MOD * (bx % MOD) % MOD); // 注意不能直接 long * long,否则溢出
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录第六十三天 | 单调栈:寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标(暴力,双指针,单调栈)(84);代码随想录主要题目结束

1、寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标 1.1 leetcode 84&#xff1a;柱状图中最大的矩形 第一遍代码思路错了&#xff0c;如&#xff1a;输入[2,1,2]&#xff0c;对于2&#xff0c;因为比栈顶元素1大&#xff0c;然后就会直接得出2&#xff08;1&#xff…

wincc定时器功能介绍

1定时器功能介绍 WinCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务&#xff0c;比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC已经提供了一些简单的定时器&#xff0c;可以满足大部分定时功能。但是在有些情况下&#xff0c…

python plot绘图

使用python绘制t-sne图&#xff0c;并保存 一下是一个将que_im_features向量可视化的例子&#xff1a; def emb_save(que_im_features,i):# 向量[75, 640, 11, 11], episodeimport numpy as npimport pandas as pdfrom sklearn import manifoldimport matplotlib.pyplot as p…

西门子S7-200SMART常见通讯问题解答

1台200SMART 如何控制2台步进电机&#xff1f; S7-200SMART CPU最多可输出3路高速脉冲&#xff08;除ST20外&#xff09;&#xff0c;这意味着可同时控制最多3个步进电机&#xff0c;通过运动向导可配置相应的运动控制子程序&#xff0c;然后通过调用子程序编程可实现对步进电…

SpringCloud 微服务全栈体系(十六)

第十一章 分布式搜索引擎 elasticsearch 六、DSL 查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1. DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1…

Mybatis和MybatisPlus:数据库操作工具的对比

目录 什么是mybatis 什么是mybatisplus MyBatis-Plus&#xff1a;为简化数据库操作而生的强大工具 一、MyBatis-Plus的背景和概述 二、MyBatis-Plus的主要特点 三、如何使用MyBatis-Plus mybatis-Plus的优势 什么是Hibernate Hibernate&#xff1a;Java开发者的数据持久…

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鹰栖息优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

vue3的单组件的编写(二)--通过对比vue2来讲解

&#x1f42f; 单组件的编写(二) 主要讲了 &#x1f308; 响应式数据的变化 响应式数据是MVVM数据变驱动编程的特色&#xff0c; VUE的设计也是受 MVVM模型的启发&#xff0c;大部分开发者选择MVVM框架都是因为数据驱动编程比传统的事件驱动编程来的方便。而选择vue&#xff…

maven打包项目,然后给其他项目引用

A项目&#xff08;这个项目需要被打包&#xff0c;作为被引入的项目&#xff09;&#xff0c;不需要启动类&#xff0c;因为作为公共模块被B项目引入&#xff1a; package com.yunya.mvndependontest.rest;import org.springframework.web.bind.annotation.RequestMapping; im…

git分支命名规范

https://www.cnblogs.com/wq-9/p/16968098.html

绝地求生:想玩以前的老地图

小编是22年8月左右开始玩的&#xff0c;更早以前跟同学偶尔玩过几次&#xff0c;所以萨诺2.0玩过&#xff0c;不过那时候菜的还不如人机&#xff0c;死了都看不到人在哪&#xff0c;所以对地图没啥印象&#xff0c;比较有印象的是地图色调变得很黄昏。 自闭城 遗迹 这是迪厅&am…

智能座舱架构与芯片- (5) 硬件篇 下

四、短距无线连接 随着汽车智能化的发展与新型电子电气架构的演进&#xff0c;传统车内有线通信技术存在着诸多痛点&#xff1a; 线束长度增加&#xff1a;由于智能化与自动化的发展&#xff0c;车内传感器和执行器均大幅增加。采用有线技术连接&#xff0c;则线束长度&#…

【带你读懂数据手册】CN3702 一款锂电池充电芯片

大家在学习智能车或者飞行器的时候&#xff0c;是不是外接一个电池&#xff1f;最近刚好学习了一款充电芯片&#xff0c;来和大家分享一下&#xff0c;也算是我的一点点笔记。 一款7.4V锂电池&#xff0c;基本上也满足了单片机的外设&#xff0c;如果需要12V或者24V的电压&…

微信收款助手消息不弹窗的解决办法

最近在做微信个人收款的回调&#xff0c;主要方法是根据通知栏截取收款信息&#xff0c;然后进行回调。 其中&#xff0c;发现一个问题&#xff0c;就是微信版本某次升级后&#xff0c;发现微信收款时不弹出消息了。 于是找到了这个解决方法&#xff0c;遇到相同问题的同学们…

(01)vite 从启动服务器开始

文章目录 前言在浏览器中使用es模块初始化环境vite依赖预构建解决了什么问题创建vite.config.js配置vite为什么vite.config.js可以用esmodule规范 前言 Vite&#xff08;发音为"veet"&#xff09;是一种现代化的前端构建工具&#xff0c;旨在提供快速的开发体验。它…

【攻防世界-misc】simple_transfer

1.下载并打开文件&#xff0c; 2.这个文件是一个pcap文件&#xff0c; 用wireshark打开&#xff0c;并按上图步骤操作&#xff0c; 会自动定位到有flag的这个信息行&#xff0c;这时需要右键追踪该信息的tcp流即可。 向下查找时&#xff0c;可以看到有一个pdf文件在这个里面&…

【Linux】Linux中的基本概念

Linux中的基本概念 1. 路径分隔符/2. 当前目录 .3. 返回上级目录 . .目录结构&#xff1a;多叉树 4. 路径5. 路径 { 绝对路径 相对路径 }6. * 通配符 指定路径下的所有文件7. 同级目录下&#xff0c;不允许存在同名文件&#xff0c;或者同名目录8. 命令的本质就是可执行文件9…

四川芸鹰蓬飞:抖店运营的时候注意什么?

抖店作为一个短视频平台&#xff0c;吸引了越来越多的商家加入。在抖店上进行有效的运营是提高销量和曝光度的关键。那么&#xff0c;抖店怎么设置运营呢&#xff1f;有哪些方法可以帮助商家在这个竞争激烈的平台上脱颖而出呢&#xff1f; 一、抖店怎么设置运营&#xff1f; 首…

Linux vi和vim编辑器、快捷键的使用

Linux vi和vim编辑器、快捷键的使用 vi和vim的三种模式使用vim编写Hello.java文件vim快捷键和命令 在Linux下一般使用vi编辑器来编辑文件&#xff0c;vim是它的增强版。vim用于在远程环境下用命令形式对文本进行在线编辑&#xff0c;既可以查看文件也可以编辑文件。 vi是Linux系…