【优选算法5】位运算经典算法面试题

1.基础位运算知识详解

2. 判定字符是否唯一

解法:位运算

每个比特位,标记是否出现过。

接下来:利用1.的基础位运算技巧,使每个比特位变成0 、1 ,最后得出结果。

3. 丢失的数字

思路1:哈希表

思路2:高斯求和

思路3:位运算:异或性质

用一个 ret 异或整个数组,然后异或 0 - n ,异或同乘除,满足交换律,不影响结果

并且,相同的数异或会抵消,异或0不变,最终留下唯一的那个"缺失"的数字

4. 两整数之和

思路:位运算

利用位运算,将二进制的表达式相加,就能达成要求。

根据1. ,两数异或,就是无进位相加。那进位怎么处理?模拟一下过程才知道:

按位与后,左移,就是需要的进位!

进位后,继续相异或,然后相与,直到进位为0:即b为0:

5. 只出现一次的数字 II

思路:位运算 + 比特位 % n

因为是计算nums中每个数字每一位相加,所以外层循环一次,统一右移动nums元素i位,判断是否为1,是的话就记数,记数完整个数组每一个比特位,再依次%3,看下列公式

是1,就改为1,是0就不变,因为提供的ret本身为0,提供其他的除外。

6.消失的两个数字

位运算 + 分组异或 分离答案

数组中与1-n全部异或一遍,得到的tmp就是a异或b的结果。

由于两数必定不同,异或的结果肯定有一位是不同的:

假设a那一位是1,b那一位是0:

按照异或的性质:位相异为1,找出第一个低位不同的,标记为diff

找到后,原数组的值被分为两类:

diff位为1的,归位a类,diff位为0的,归位b类。

这样,a,b就被分为两组,每组都只有一个不同的数字。问题就转化为只有一个不同的数字。

将他们全部与1-n中,diff为也为0或1的,一起异或。

就能抵消组中相同的,a组留下a,b组留下b

最后返回{a,b}

相关推荐
吃好睡好便好1 天前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
better_liang1 天前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
小马爱打代码1 天前
Spring源码 第四篇:Spring 5 源码深度拆解:AOP 全流程核心原理
java·后端·spring
better_liang1 天前
每日Java面试场景题知识点之-SpringBoot启动流程
java·面试·springboot·源码解析·启动流程
Raink老师1 天前
【AI面试临阵磨枪-69】如何设计一个支持百万级工具的 Agent 系统?如何快速路由与选择工具?
人工智能·面试·职场和发展
ServBay1 天前
2026 Mac 本地大模型部署深度解析与混合架构指南
后端·macos·aigc
云泽8081 天前
笔试算法 -位运算篇(二):从唯一字符到消失数字
c++·算法·位运算
ʚ希希ɞ ྀ1 天前
不同路径|| -- dp
算法
Raink老师1 天前
【AI面试临阵磨枪-77】音视频 + AI:实时字幕、翻译、降噪、虚拟人、多模态对话
人工智能·面试·音视频