Leetcode 2939. Maximum Xor Product

  • Leetcode 2939. Maximum Xor Product
    • 1. 解题思路
    • 2. 代码实现
    • 3. 代码优化:
  • 题目链接:2939. Maximum Xor Product

1. 解题思路

这一题思路上来说我们就是逐位进行考虑。

对于xor操作,显然我们只有以下两种情况:

  1. 00或者11:此时我们总可以令两者都变成11,此时获得的乘积一定最大;
  2. 01或者10:此时我们变换的结果也是01或者10,但两者的乘积变化就会有所区别。

因此,这里我们主要需要考虑的就是第二种情况,也就是对于这些位上的01分配问题,而这个不难证明,假设其他位上有结论 a > b a>b a>b,那么总是将1分配到b上面可以使得结果更大。

故而,我们只需要基于这个思路进行代码实现就行了。

2. 代码实现

给出python代码实现如下:

class Solution:def maximumXorProduct(self, a: int, b: int, n: int) -> int:MOD = 10**9 + 7def num2digits(num):digits = [0 for i in range(50)]idx = 0while num != 0:digits[idx] = num % 2num = num // 2idx += 1return digitsdef digits2num(digits):flag = 1ans = 0for d in digits:ans += flag * dflag = flag * 2 % MODreturn ans % MODdef convert(digits_a, digits_b):status = 0for idx in range(49, -1, -1):if idx >= n:if digits_a[idx] > digits_b[idx]:if status == 0:status = 1elif digits_a[idx] < digits_b[idx]:if status == 0:status = 2continueif digits_a[idx] == 0 and digits_b[idx] == 0:digits_a[idx] = 1digits_b[idx] = 1elif digits_a[idx] == 1 and digits_b[idx] == 1:digits_a[idx] = 1digits_b[idx] = 1elif digits_a[idx] == 0 and digits_b[idx] == 1:if status == 0:status = 2elif status == 2:digits_a[idx] = 1digits_b[idx] = 0else:if status == 0:status = 1elif status == 1:digits_a[idx] = 0digits_b[idx] = 1returndigits_a = num2digits(a)digits_b = num2digits(b)convert(digits_a, digits_b)na = digits2num(digits_a)nb = digits2num(digits_b)return na * nb % MOD          

提交代码评测得到:耗时69ms,占用内存16.3MB。

3. 代码优化:

看了一下大佬们的提交结果,思路也大差不差,不过实现上就比我优雅很多了,给一个大佬的实现如下,膜拜一下。

class Solution:def maximumXorProduct(self, a: int, b: int, n: int) -> int: for i in range(n):if (a & (1 << i)) == 0 and (b & (1 << i)) == 0:a += 1 << ib += 1 << ifor i in range(n):if a > b and (a & (1 << i)) != 0 and (b & (1 << i)) == 0 and (a - (1 << i)) * (b + (1 << i)) > a * b:a -= 1 << ib += 1 << ielif a < b and (a & (1 << i)) == 0 and (b & (1 << i)) != 0 and (a + (1 << i)) * (b - (1 << i)) > a * b:a += 1 << ib -= 1 << ireturn a * b % int(1e9 + 7)

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

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

相关文章

【brpc学习实践九】mbvar及bvar可观测

概念、学习地址 mbvar中有两个类&#xff0c;分别是MVariable和MultiDimension&#xff0c;MVariable是多维度统计的基类&#xff0c;MultiDimension是派生模板类。也是主要用来多多线程计数用的。这里用到再详细去了解即可 https://github.com/luozesong/brpc/blob/master/do…

知识的分层:know-what/how/why

知识&#xff08;knowledge&#xff09;表示知道某些信息。通常而言&#xff0c;知识是正确的&#xff0c;但不一定是完备的。知识本身有自己的适用范围&#xff0c;特别是工程技术类问题。 根据知识的类型&#xff0c;可分为三类&#xff1a; know-whatknow-howknow-why kno…

Java多线程二-线程安全

1、线程安全问题 多个线程&#xff0c;同时操作同一个共享资源的时候&#xff0c;可能会出现业务安全问题。 2、实例&#xff1a;取钱的线程安全问题 2.1、场景 小明和小红是夫妻&#xff0c;他们有个共同账户&#xff0c;余额是十万元&#xff0c;如果两人同时取钱并且各自取…

vue3-10

动态路由与菜单 路由文件 a6router.ts import { createRouter, createWebHashHistory } from "vue-router"; import { useStorage } from "vueuse/core"; import { Route, Menu } from "../model/Model8080"; const clientRoutes [{path: &q…

nginx的一些命令

linux start nginx 开启 /usr/sbin/nginx&#xff08;直接启动&#xff09; nginx -s stop 停止 /usr/local/nginx/sbin/nginx -s stop nginx -s quit 安全停止&#xff0c;保存信息 nginx -s reload 当配置信息修改&#xff0c;需要重新载入这些配置时使用此命令 nginx -s re…

MATLAB|交叉折线图之间分色填充

目录 公众号 效果图 交叉折线图之间分色填充概念介绍 应用领域 优点 缺点

Linux内核--内存管理(二)物理内存分页机制

一、引言 二、物理内存模型 ------>2.1、平坦内存模型(Flat Memory Model) ------>2.2、对称多处理 SMP(Symmetric MultiProcessing) ------>2.3、非均衡访存模型 NUMA(Non-Uniform Memory Access) 三、节点、区域和页 ------>3.1、节点 ------>3.2、区域…

Python 安装mysqlclient 错误 无法打开包括文件: “mysql.h”: 解决方法

解决方案&#xff1a;python最新3.12.0不支持mysqlclient 请下载 python3.9.9 版本 高速下载地址CNPM Binaries Mirror 官方下载地址Welcome to Python.org 下载完成后将python添加到环境变量 pycharm 虚拟环境下的python版本切换到你刚才下载的3.9.9的python版本 Avai…

C#文件操作File类vsFileInfo类和Directory类vsDirectoryInfo类

目录 一、File类vsFileInfo类 1.File类 &#xff08;1&#xff09;示例源码 &#xff08;2&#xff09;生成效果 2.FileInfo类 &#xff08;1&#xff09;示例源码 &#xff08;2&#xff09;生成效果 二、 Directory类vsDirectoryInfo类 1.Directory类 &#xff08;…

FilterChain攻击解析及利用

文章目录 BASE64解码和编码原理浅析EncodingDecoding Filterchain构造&#xff08;原理阐述&#xff09;回顾死亡代码特性一&#xff08;双重去杂&#xff09;特性二&#xff08;粘合性&#xff09; 任意字符构造工具一工具二 实战例题[NSSRound#7 Team]brokenFilterChain&…

运维01:云计算

云计算的类型 分类&#xff1a;公有云、私有云、混合云 云计算的服务模式 服务模式分3种&#xff1a; ①IaaS&#xff08;Infrastructure as a Service&#xff09;&#xff1a;基础设施即服务 ②PaaS&#xff08;Platform as a Service&#xff09;&#xff1a;平台即服务…

Java并发编程

一、基础知识 1. 为什么要使用并发编程 提升多核CPU的利用率&#xff1a;一般来说一台主机上的会有多个CPU核心&#xff0c;我们可以创建多个线程&#xff0c;理论上讲操作系统可以将多个线程分配给不同的CPU去执行&#xff0c;每个CPU执行一个线程&#xff0c;这样就提高了CP…

Portraiture2024最新Photoshop磨皮插件更新啦

Portraiture是一款由Imagenomic公司研发的Photoshop磨皮插件。该插件以其优秀的磨皮效果&#xff0c;成为了众多摄影师和化妆师使用的首选插件。Portraiture主要用于影楼、婚纱、时尚摄影等各个领域。其主要特点是能够轻松地模拟人眼的视觉感受&#xff0c;自然地修饰人像照片。…

带头双向循环链表的实现

目录 认识带头双向循环链表 双向链表 循环链表 带头链表 带头双向循环链表 双向链表的优势和不足&#xff1a; 顺序表的优势和不足&#xff1a; 实现带头双向循环链表 创建带头双向循环链表 初始化 创建返回链表的头结点 打印链表 尾插 尾删 头插 头删 查找 在…

java小游戏之【王者荣耀】

首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 代码 package com.sxt;import javax.swing.*; import java.awt.*;public class Background extends GameObject {p…

android shape绘制半圆

<?xml version"1.0" encoding"utf-8"?><shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"rectangle"><sizeandroid:width"20dp"android:height"10dp" /><…

滑块验证码之模拟人工滑速

前言 代码直接运行即可 此处是用的selenium模拟&#xff0c;主要记录的难点是如何 模拟人工滑速 具体原理和利用到的东西都有做注释&#xff0c;逻辑完整&#xff0c;小白还是可以尝试理解的 一、正常简单模拟滑动 目标网址&#xff1a;点击 import base64 import time im…

【全栈开发】RedwoodJS与BlitzJS:全栈JavaScript元框架的未来

Redwood和Blitz是两个即将出现的全栈元框架&#xff0c;它们提供了创建SPAs、服务器端渲染页面和静态生成内容的工具&#xff0c;并提供了生成端到端支架的CLI。我一直在等待一个有价值的Rails JavaScript替代品&#xff0c;谁知道什么时候。这篇文章是对两者的概述&#xff0c…

参数估计(三)区间估计

文章目录 区间估计的概念一个正态总体的情形 μ \mu μ 的区间估计 σ 2 \sigma^2 σ2 的区间估计 两个正态总体的情形 μ 1 − μ 2 \mu_1-\mu_2 μ1​−μ2​ 的区间估计 σ 1 2 / σ 2 2 \sigma_1^2/\sigma_2^2 σ12​/σ22​ 的区间估计 参考文献 区间估计的概念 对未知参…

opencv-利用DeepLabV3+模型进行图像分割去除输入图像的背景

分离图像中的人物和背景通常需要一些先进的图像分割技术。GrabCut是一种常见的方法&#xff0c;但是对于更复杂的场景&#xff0c;可能需要使用深度学习模型。以下是使用深度学习模型&#xff08;如人像分割模型&#xff09;的示例代码&#xff1a; #导入相关的库 import cv2 …