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

算法专题五:位运算

1.位1的个数

题目链接:LCR 133. 位 1 的个数 - 力扣(LeetCode)

每次干掉最右边的1,统计count的个数并且每次都更新。

public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int count =0;while(n!=0){n=n&(n-1);count++;}return count;}
}

2.比特位个数

题目链接:LCR 003. 比特位计数 - 力扣(LeetCode)

class Solution {public int[] countBits(int n) {int[] ret=new int[n+1];for(int i=1;i<=n;i++){ret[i]=ret[i & (i-1)]+1;}return ret;}
}

 3.汉明距离

题目链接:461. 汉明距离 - 力扣(LeetCode)

求完之后,求出其中1的个数,不同数的个数,就是1的个数

class Solution {public int hammingDistance(int x, int y) {int p=x ^ y;int count=0;while(p!=0){p=p&(p-1);count++;}return count;}
}

4.只出现1次的数字

题目链接:136. 只出现一次的数字 - 力扣(LeetCode)

class Solution {public int singleNumber(int[] nums) {int x=0;for(int num:nums){x=x^num;}return x;}
}

5.只出现一次的数字Ⅲ

题目链接:260. 只出现一次的数字 III - 力扣(LeetCode)

class Solution {public int[] singleNumber(int[] nums) {int m=0;for(int num:nums){m=m^num;}int r=m & (-m);int x=0,y=0;for(int num:nums){if((num&r)==0){x=x^num;}else{y=y^num;}}return new int[]{x,y};}
}

 6.判断字符是否唯一

题目链接:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)

class Solution {public boolean isUnique(String astr) {int n=astr.length();int num=0;for(int i=0;i<n;i++){int x=astr.charAt(i)-'a';if(((num>>x)&1)==1){return false;}else{num|=(1<<x);}}return true;}
}

 

7.丢失的数字

题目链接:268. 丢失的数字 - 力扣(LeetCode)

class Solution {public int missingNumber(int[] nums) {int ret=0;for(int x:nums){ret=ret^x;}for(int i=0;i<nums.length+1;i++){ret=ret^i;}return ret;}
}

 

 8.两整数之和

题目链接:371. 两整数之和 - 力扣(LeetCode)

class Solution {public int getSum(int a, int b) {while(b!=0){int x=a^b;int y=(a&b)<<1;a=x;b=y;}return a;}
}

9.只出现一次的数字Ⅱ

题目链接:137. 只出现一次的数字 II - 力扣(LeetCode)

class Solution {public int singleNumber(int[] nums) {int ret=0;for(int i=0;i<32;i++){int sum=0;for(int x:nums){if(((x>>i) & 1)==1){sum++;}}sum%=3;if(sum==1){ret=ret|(1<<i);}}return ret;}
}

 

10.消失的两个数字

题目链接:面试题 17.19. 消失的两个数字 - 力扣(LeetCode)

运用的原理是  " 丢失的数字 " + " 只出现一次的数字Ⅲ "

看这两道题,这个问题就会迎刃而解

class Solution {public int[] missingTwo(int[] nums) {int ret=0;for(int x:nums){ret^=x;}for(int i=1;i<=nums.length+2;i++){ret^=i;}int r=ret&(-ret);int a=0,b=0;for(int i=1;i<=nums.length+2;i++){if((i & r)==0){a=a^i;}else{b=b^i;}}for(int x:nums){if((x & r)==0){a=a^x;}else{b=b^x;}}return new int[]{a,b};}
}

希望能对大家有所帮助!!!!!

相关文章:

  • 机器学习实操 第二部分 第19章 大规模训练和部署 TensorFlow 模型
  • 关闭 Windows Server 2012 R2 的关机原因提示功能,从而实现直接执行关机或重启操作
  • 二维旋转矩阵:让图形动起来的数学魔法 ✨
  • QT 解决msvc fatal error C1060: 编译器的堆空间不足
  • js 两个数组中的指定参数(id)相同,为某个对象设置disabled属性
  • ROS导航局部路径规划算法
  • “点对点通信(Point-to-Point)”和“端对端通信(End-to-End)”
  • LearnOpenGL01:创建项目
  • 从逻辑学视角理解统计学在数据挖掘中的作用
  • rust-candle学习笔记10-使用Embedding
  • QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。
  • 请求从发送到页面渲染的全过程
  • vscode 配置doxygen注释和snippet
  • 大模型备案环节如何评估模型的安全性
  • 简易版无人机飞控
  • C++ Dll创建与调用 查看dll函数 MFC 单对话框应用程序(EXE 工程)改为 DLL 工程
  • Spring Boot快速开发:从零开始搭建一个企业级应用
  • 《工业计算机硬件技术支持手册》适用于哪些人群?
  • STM32GPIO输入实战-key按键easy_button库移植
  • ES6新增Set、Map两种数据结构、WeakMap、WeakSet举例说明详细。(含DeepSeek讲解)
  • 玉渊谭天丨中方为何此时同意与美方接触?出于这三个考虑
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!
  • 本科生已发14篇SCI论文被指由其教授父亲挂名,重庆大学成立工作组核实
  • 习近平向“和平薪火 时代新章——纪念中国人民抗日战争和苏联伟大卫国战争胜利80周年中俄人文交流活动”致贺信
  • 华为招聘:未与任何第三方开展过任何形式的实习合作
  • 印度导弹凌晨打击巴基斯坦多座设施,巴总理:正对战争行为作有力回应