【算法思考记录】力扣2935. 找出强数对的最大异或值【Python3,位运算,哈希表】

力扣2935. 找出强数对的最大异或值

题目概述

题目编号:2935
题目难度:困难
相关标签:数组, 排序, 位运算

给定一个整数数组 nums,任务是找出其中可以形成的所谓“强数对”的最大异或值。强数对定义为一对整数 (x) 和 (y),满足 |x - y| ≤ \leq min(x, y)。

示例分析

  1. 示例 1
    输入:nums = [1,2,3,4,5]
    输出:7
    分析:数组中的强数对及其异或值有多种组合,其中 3 XOR 4 = 7 是最大的。

  2. 示例 2
    输入:nums = [10,100]
    输出:0
    分析:仅有 (10, 10)(100, 100) 两个强数对,它们的异或值均为 0。

  3. 示例 3
    输入:nums = [500,520,2500,3000]
    输出:1020
    分析:最大异或值来自 500 XOR 520 = 1020

解题思路

算法关键在于找到使异或值最大化的数对。首先,对数组进行排序,以便后续操作。主要思路是从最高位开始,检查是否存在两个数使得该位为 1,同时满足强数对条件。

  1. 使用掩码(mask)来逐位检查。
  2. 通过位运算和哈希表(seen)来快速判断是否存在满足条件的数对。
  3. 掩码用于保留数的前缀部分,以便对每个位的影响进行评估。

代码解析

  • 排序:首先对 nums 排序,以简化强数对的确定。
  • 位运算:使用位运算来逐步构建最大的异或值。
  • 哈希表:使用哈希表来存储和快速检索数对。
  • 掩码运算:掩码用于保留数字的高位部分,以检查每个位的贡献。

完整代码

class Solution:def maximumStrongPairXor(self, nums: List[int]) -> int:nums.sort()mask = 0ans = 0hb = max(nums).bit_length()for i in range(hb, -1, -1):mask |= 1 << inew_ans = ans | (1 << i)"""如果要使得第i位为1,,要满足两个条件1.存在mask_x ^ mask_y = new_ans2.存在abs(x - y) <= min(x, y)对于第二个条件来说,可以设x <= y,此时条件2可以化简成y <= 2 * x因为nums已经有序,所以对于已经迭代过的元素就可以是“x”。那么,可以维护一个哈希表,检查是否存在一个x可以满足y <= 2 * x为了满足条件1,只考虑这个x的前i位,后面的位置为0,也就是mask_x,mask_x必须满足mask_x ^ mask_y = new_ans。那么,可以创建一个哈希表seen,以mask_x为键,以x为值。"""seen = {}for y in nums:mask_y = y & maskmask_x = mask_y ^ new_ansif mask_x in seen and y <= 2 * seen[mask_x]:ans = new_ansbreak# 即使会覆盖以前出现过的mask_x,也只会让结果更优# 因为x的值越大越好,我们可以保证x <= y,这只会更容易满足条件2.seen[mask_y] = yreturn ans

小结

这种算法结合了位运算和哈希表,有效地解决了在一定条件下求最大异或值的问题。它展示了如何在复杂问题中运用多种技术和方法。

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

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

相关文章

网工学习5 交换机端口相关配置

交换机的接口属性默认支待一般网络环境&#xff0c;一般情况下是不需要对其接口进行设置的。在某些情况下需 要对其端口属性进行配置时&#xff0c;配置的对象主要有接口隔离、速率、双工等信息。 5.1 接口隔离设置 > 配置接口 GE0/0/1 和 GE0/0/2 的接口隔离功能&#xf…

arm linux 平台 打开摄像头矫正

安装v4l v4l 意思为 video for Linux&#xff0c; 是linux驱动链接摄像头的软件应用部分&#xff0c;当然先要安装好v4l-utils $ sudo apt install -y v4l-utils $ v4l2-ctl --list-devices $ v4l2-ctl -d 0 --list-formats-ext看完以后基础信息以后就可以使用jetso…

Leetcode1094. 拼车

Every day a Leetcode 题目来源&#xff1a;1094. 拼车 解法1&#xff1a;差分数组 对于本题&#xff0c;设 a[i] 表示车行驶到位置 i 时车上的人数。我们需要判断是否所有 a[i] 都不超过 capacity。 trips[i] 相当于把 a 中下标从 fromi 到 toi−1 的数都增加 numPassenge…

【Unity动画】什么是动画蒙版(Avatar Mask)

Avatar Mask&#xff08;骨骼蒙版&#xff09;是Unity中用于限制动画系统作用范围的一种机制。它允许你选择性地启用或禁用动画系统对模型骨骼的影响&#xff0c;从而实现更精细的动画控制。 以下是Avatar Mask的一些关键概念&#xff1a; 骨骼蒙版&#xff08;Bone Mask&…

【ArcGIS Pro微课1000例】0045:深度学习--车牌模糊

借助ArcGIS Pro提供的车牌模糊训练模型,可以很方便实现车牌模糊。 文章目录 一、车牌模糊对比二、工具介绍三、案例实现一、车牌模糊对比 车牌模糊前: 车牌模糊后: 二、工具介绍 本功能使用的依然是ArcGIS Pro提供的深度学习工具中的使用深度学习分类像素(Classify Pixel…

JavaScript基础知识20——循环结构:退出循环

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近一段时间没学习JavaScript&#xff0c;今天看数字孪生的资料&#xff0c;发现很多低代码开发还是得必须熟悉JavaScript才行&#xff0c;为了以后方便搞数字孪生&#xff0c;有时间还是继续学习下JavaScript。 以下…

前端使用 xlsx.js 工具读取 excel 遇到时间日期少 43 秒的解决办法

在使用 xlsx 读取 excel 的时间格式的数据时&#xff0c;如 ‘2023-11-30’&#xff0c;‘2023/11/30’ &#xff0c;默认会读取一串数字字符串&#xff0c;如&#xff1a;‘45260’&#xff0c;此时需要在 read 的时候传入一个配置项&#xff1a; import { read } from xlsxc…

如何开启Windows Server 2016 远端桌面

使用GUI 设定 服务器管理器–> 本地服务器–> 远端桌面 启用远端桌面 远端–> 允许远端连线至此电脑 会提示防火墙设定跟电源设定 防火墙之前已经关闭了 完成

Kubernetes v1.28.4 安装笔记

安装 kubelet kubeadm kubectl K8s 集群的每个 node 上都要安装的 官方文档参考&#xff1a; https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl 配置 containerd &#xff08;容器运…

matlab 多目标粒子群优化算法MOPSO

1、内容简介 略 21-可以交流、咨询、答疑 多目标、粒子群 2、内容说明 多目标粒子群优化算法MOPSO 3、仿真分析 略 %% Problem Definition TestProblem3; % Set to 1, 2, or 3 switch TestProblem case 1 CostFunction(x) MyCost1(x); nVar5; …

android 13.0 framework禁用系统所有通知

1.概述 在13.0的系统rom产品开发中最近公司项目要求 禁用系统所有通知 不需要在下拉状态栏显示通知功能实现 要控制系统通知的开关功能,需要屏蔽系统通知,而系统通知都是由NoticationManagerServices.java来管理的, 这个NMS服务管理通知就需要在NotificationManagerService.…

数据库管理-第120期 初探Halo数据库(202301201)

数据库管理-第120期 初探Halo数据库&#xff08;202301201&#xff09; 12月份正好也是第120期&#xff0c;新的一篇文章&#xff0c;尝试一条新的路线。其实吧&#xff0c;Halo&#xff08;羲和&#xff09;这个数据库我较早时间就听说过&#xff08;早于今年DTCC&#xff0c…

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标) 目录 时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)预测效果基本介绍环境准备程序设计参考资料预测效果 基本介绍 LSTM是一种递归神经网络(RNN)的变体

HCIP —— OSPF 综合实验

实验拓扑&#xff1a; 实验要求&#xff1a; 1&#xff0c;R4为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4与其他所有直连设备间均使用公有IP 2&#xff0c;R3-R5/6/7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分…

如何从 Jira 成功迁移到极狐GitLab,看这个就够了!

内容来源&#xff1a;https://about.gitlab.com/blog 作者&#xff1a;Melissa Ushakov Atlassian 之前表示&#xff0c;到 2024 年 2 月会全面终止对于其服务器端产品的支持。 随着 Jira Server 的生命周期即将结束&#xff0c;众多组织都在考虑将其敏捷项目管理工具从Jira 迁…

van-list的onload事件多次触发的问题

一、问题描述 如图所示&#xff0c;页面刷新的时候&#xff0c;调了3次接口&#xff08;总共27条数据&#xff0c;我分页10条&#xff09;&#xff0c;一直莫名奇妙的 我期望是默认加载第一页&#xff0c;然后我上拉的时候再push第二页的数据 二、解决方法 还是要多看文档 1…

彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…

RK3568平台开发系列讲解(Linux系统篇) dtb 到 device_node 的转化

🚀返回专栏总目录 文章目录 一、dtb 展开流程二、dtb 解析过程源码分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过设备树 dtb 如何展开成 device_node 一、dtb 展开流程 设备树源文件编写: 根据设备树的基本语法和相关知识编写符合规范的设备树。…

c# OpenCV 读取、显示和写入图像(二)

读取、显示和写入图像是图像处理和计算机视觉的基础。即使在裁剪、调整大小、旋转或应用不同的滤镜来处理图像时&#xff0c;您也需要先读取图像。因此&#xff0c;掌握这些基本操作非常重要。 imread()读取图像imshow()在窗口中显示图像imwrite()将图像保存到文件目录里 我们…

YOLOV7改进:在C5模块不同位置添加SegNext_Attention

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:SegNext_Attention注意力机制,实现…