当前位置: 首页 > 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…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...