当前位置: 首页 > news >正文

【Java 优选算法】位运算

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



基础位运算符:

&: 有 0 就是 0

| : 有 1 就是 1

^ :相同为0,相异为1(无进位相加)

1.给一个数 n, 确定它的二进制表示中的第x位是 0 还是 1 . 使用公式(n >> x) & 1

2.将一个数 n 的二进制表示的 第x位 修改成 1. 将x位置 | 1,其余位置 | 0, 操作: n = n | (1 << x)

3.将一个数n 的二进制表示的第x 位修改成0. 将x位置 & 0,其余位置 & 1,操作: n = n&(~(1 << x) )

4.lowbit提取一个数(n)二进制表示中最右侧的1 . 让-n(让数n 按位取反再加1) & n

其中 -n 操作 本质是:将最左侧的1 的左边区域全部变成相反 

 

5.将一个数(n)二进制表示中的最左侧的1变成0. 使用 n & (n - 1) 

6.异或(^)运算的运算律 

  1. a ^ 0 = a 
  2. a ^ a = 0(消消乐)
  3. a ^ b ^ c = a ^ (b ^ c)

由第一个和第二个规律延申: 奇数个a相异或得到a, 偶数个a异或得到0

对应的题目练习

判定字符是否唯一

题目链接

解法

解法一: 利用哈希表 ,遍历字符串,每次将字符放进hash表中,判断是否重复. 时间复杂度和空间复杂度都是O(n),但其实new一个hash[26]就行

解法二: 位图, 用一个int 32位中的0~25位每一位表示26个字母,0代表没出现过,1代表出现了

优化:鸽巢原理(抽屉原理),如果字符串长度大于26个,那么一定是有重复的字母

代码

class Solution {public boolean isUnique(String astr) {//优化if(astr.length() > 26) return false;int bitMap = 0;for(int i = 1; i < astr.length(); i++){int x = astr.charAt(i) - 'a';//先判断字符是否在位图中if((bitMap >> x) & 1 == 1) return false;//把当前字符加入位图中bitMap |= 1 << x;}return true;   }
}

丢失的数字

题目链接

解法

解法一: 哈希集合,遍历数组,将出现的过的数字标记为1

解法二: 高斯求和, 求0到5的和 ,再减去nums的和,得出结果

 解法三: 异或运算规律, 将nums和0到5的所有数字都 异或 ,得到的结果就是 消失的数字

代码

//利用哈希集合
class Solution {public int missingNumber(int[] nums) {//利用集合Set<Integer> set = new HashSet<>();int n = nums.length;//先把原数组放到set里for(int x : nums) set.add(x);int ret = -1;//把完整数组的每一个元素放到set里判断是否包含,即可查出缺失的数字for(int i = 0; i <= n; i++){if(!set.contains(i)){ret = i;break;}}return ret;}
}//利用高斯求和
class Solution {public int missingNumber(int[] nums) {int n = nums.length;int ret = (n * (n + 1)) / 2;for(int i : nums) ret -= i;return ret;}
}//利用异或
class Solution {public int missingNumber(int[] nums) {int ret = 0;for(int x : nums){ret ^= x;}        for(int i = 0; i <= nums.length; i++){ret ^= i;           }return ret;}
}

两整数之和

题目链接

解法

利用位运算, 将要计算的两个数的和拆分为 两部分: 无进位和 以及 进位和 

  1. 无进位相加 ,"异或"运算:, 即a ^ b,
  2. 进位操作可以使用 "与"运算后再左移一位用符号表示: (a & b) << 1

步骤1得到的数又重新记为 a, 步骤2得到得到的数重新记为b,重复以上操作,最后直到b=0即可得出结果

画图举例

代码

class Solution {public int getSum(int a, int b) {while(b != 0){int tmp = a;a ^= b;//先算出无进位相加b = (b & tmp)<<1;//算出进位相加}return a;}
}

只出现一次的数字||

题目链接

解法

题目要求实现: 线性时间复杂度 即O(n),常数级空间复杂度 即O(n)

 数组中所有数的比特位 相加可以分为4种情况,如下图

将每一个数的 每一位比特位分别对应相加再%3得到的就是 只出现过一次的数a

画图举例

代码

class Solution {public int singleNumber(int[] nums) {int ret = 0;for(int i = 0; i < 32; i++){//依次修改ret中的每一个比特位int sum = 0;//统计nums中所有数的第i为的和for(int x : nums){if(((x >> i) & 1) == 1){sum++;}} sum %= 3;//超时sum对应i位置ret中比特位的数,//如果sum是1,就将ret的i位置修改为1,0则不用管if(sum == 1) ret |= 1 << i;}return ret;}
}

消失的两个数字

题目链接

解法 

nums完整数组1~n所有数字都异或 得到的结果就是a^b(必定不为0),结果就是将a^b分开得到a和b,问题就转变成了: 已知a^b,如何将a和b分开

找到a^b相异的部分dif(即a^b的比特位第一次出现1的位置),将所有的数通过 dif 分类开,再 异或,就可以得到a和b

代码

class Solution {public int[] missingTwo(int[] nums) {int tmp = 0;for(int x: nums) tmp ^= x;for(int i = 1;i <= nums.length + 2;i++) tmp ^= i;//找出a,b两个数比特位不同的第一位,即第一次出现1的位置int dif= 0;while(true){if(((tmp >> dif) & 1) == 1) break;else dif++;}int[] ret = new int[2];for(int x: nums){if(((x >> dif) & 1) == 1) ret[1] ^= x;else ret[0] ^= x; }//将所有的数按照dif位不同,分两类进行异或for(int i =1 ;i <= nums.length + 2;i++){if(((i >> dif) & 1) == 1) ret[1] ^= i;else ret[0] ^= i;}return ret;}
}

相关文章:

【Java 优选算法】位运算

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 基础位运算符: &: 有 0 就是 0 | : 有 1 就是 1 ^ :相同为0,相异为1(无进位相加) 1.给一个数 n, 确定它的二进制表示中的第x位是 0 还是 1 . 使用公式(n >> x) &…...

细分数字货币钱包的不同种类

文章目录 一、中心化钱包1.1 中心化钱包架构1.2 中心化钱包业务细节流程 二、去中心化钱包(HD 钱包)2.1 去中心化钱包架构2.2 去中心化钱包细节业务流程 三、硬件钱包3.1 硬件钱包架构3.2 硬件钱包细节业务流程 四、MPC 托管钱包五、多签钱包 中心化钱包 &#xff1a;钱包私钥一…...

Nginx Embedded Variables 嵌入式变量解析(4)

Nginx Embedded Variables 嵌入式变量解析(4) 相关链接 nginx 嵌入式变量解析目录nginx 嵌入式变量全目录nginx 指令模块目录nginx 指令全目录 一、目录 1.1 变量目录 1.1.24 ngx_stream_core_module $binary_remote_addr $bytes_received $bytes_sent $connection $hos…...

ARM64 Trust Firmware [四]

完成第二阶段 BL2 的操作后就加载并进入 BL31&#xff0c;BL31 位于 DRAM 中&#xff0c;EL3 模式。除了做架构初始化和平台初始化外&#xff0c;还做了如下工作&#xff1a; 基本硬件初始化&#xff0c;比如 GIC&#xff0c;串口&#xff0c;timer 等&#xff1b;PSCI 服务的…...

SQLMesh 系列教程6- 详解 Python 模型

本文将介绍 SQLMesh 的 Python 模型&#xff0c;探讨其定义、优势及在企业业务场景中的应用。SQLMesh 不仅支持 SQL 模型&#xff0c;还允许通过 Python 编写数据模型&#xff0c;提供更高的灵活性和可编程性。我们将通过一个电商平台的实例&#xff0c;展示如何使用 Python 模…...

聊一聊vue如何实现角色权限的控制的

大家好&#xff0c;我是G探险者。 关于角色与权限控制&#xff0c;通常是分为两大类&#xff1a;一种是菜单权限&#xff1b;一种是操作权限。 菜单权限是指&#xff0c;每个角色对应着可以看到哪些菜单&#xff0c;至于每个菜单里面的每个按钮&#xff0c;比如增删改查等等这类…...

Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. 环境准备1.1安装 Python1.2选择开发环境1.3安装 MySQL 数据库1.4 安装 pymysql 库 2. 连接数据库3. 数据库基本操作3.1 创建数据库3.2 创建表3.3 插入数据3.…...

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)&#xff1a;https://www.bilibili.com/video/BV1M6rdYEEog/ 备注&#xff1a; 1.本地离线卡密采用最安全的非对称加解密技术&#xff0c;设备id采用最安全多重混合加密不可逆技术生成&…...

天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制

天 锐 蓝盾终端安全管理系统以终端安全为基石&#xff0c;深度融合安全、管理与维护三大要素&#xff0c;通过对桌面终端系统的精准把控&#xff0c;助力企业用户构筑起更为安全、稳固且可靠的网络运行环境。它实现了管理的标准化&#xff0c;有效破解终端安全管理难题&#xf…...

LeetCode 2595.奇偶位数:位运算

【LetMeFly】2595.奇偶位数&#xff1a;位运算 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-even-and-odd-bits/ 给你一个 正 整数 n 。 用 even 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的偶数下标的个数。 用 odd 表示…...

一周学会Flask3 Python Web开发-response响应格式

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在HTTP响应中&#xff0c;数据可以通过多种格式传输。大多数情况下&#xff0c;我们会使用HTML格式&#xff0c;这也是Flask中…...

uni-app开发app时 使用uni.chooseLocation遇到的问题

问题一&#xff1a;不显示 问题二&#xff1a;选择地址列表一直在加载中 因为 uni-app 接口文档 中已经说明&#xff0c;使用腾讯的话需要开启云服务&#xff0c;具体可看官网&#xff0c;这就是为什么使用时直接不显示的原因&#xff0c;所以我使用的高德&#xff0c;但又出现…...

Android Hal AIDL 简介 (一)

Android 接口定义语言 (AIDL) 是一款可供用户用来抽象化 IPC 的工具。 以在 .aidl 文件中指定的接口为例,各种构建系统都会使用 aidl 二进制文件构造 C++ 或 Java 绑定,以便跨进程使用该接口(无论其运行时环境或位数如何)。 AIDL 可以在 Android 中的任何进程之间使用:在…...

鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )

前言&#xff1a; 这个模块可以截取组件的图片&#xff0c;无论组件是否已加载。截图只能拍到组件本身的大小区域。 如果组件或其子组件画得超出了自己的区域&#xff0c;超出的部分不会出现在截图中。截图不会拍到与当前组件平级的&#xff08;兄弟&#xff09;组件。 模块简…...

华为昇腾910b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250&#xff0c;先看看配置。之前是部署的讯飞大模型&#xff0c;发现资源利用率太低了。把5台减少到3台&#xff0c;就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘&#xff0c;500G的系统盘&#xff0c; 2块3T固态…...

[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植

最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台&#xff0c;现在已经移植了&#xff0c;尝试了下效果&#xff0c;降噪效果很显著&#xff0c;噪声带被显著抑制了 降噪前&#xff1a; 降噪后&#xff1a;...

golang内存泄漏

golang也用了好几年了&#xff0c;趁着有空 整理归纳下&#xff0c;以后忘了好看下 一般认为 Go 10次内存泄漏&#xff0c;8次goroutine泄漏&#xff0c;1次是真正内存泄漏&#xff0c;还有1次是cgo导致的内存泄漏 1:环境 go1.20 win10 2:goroutine泄漏 单个Goroutine占用内存&…...

安科瑞能源物联网平台助力企业实现绿色低碳转型

安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进&#xff0c;能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台&#xff08;EMS 3.0&#xff09;&#xff0c;正是这一趋势下的创新解决方案。该平台集成了物联网&…...

Android Http-server 本地 web 服务

时间&#xff1a;2025年2月16日 地点&#xff1a;深圳.前海湾 需求 我们都知道 webview 可加载 URI&#xff0c;他有自己的协议 scheme&#xff1a; content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的&#xff0c;如果你想直接…...

腾讯的webUI怎样实现deepseek外部调用 ; 腾讯云通过API怎样调用deepseek

腾讯的webUI怎样实现deepseek外部调用 目录 腾讯的webUI怎样实现deepseek外部调用腾讯云通过API怎样调用deepseekhtml方式curl方式python方式腾讯云通过API怎样调用deepseek 重点说明:不需要SK,仅仅使用ip和端口号 html方式 <!DOCTYPE html> <html lang="e…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...