实用指南:《算法闯关指南:优选算法--位运算》--34.判断字符是否唯一,35.丢失的数字

博主简介:

文章目录
前言:
聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。
位运算基础前置知识

上面提到的5个题大家可以先写一下,其它的公式和推导建议大家记下来。
34. 判断字符是否唯一
题目链接:
题目描述:

题目示例:

解法(位图的思想):
算法思路:
利用【位图】的思想,每一个【比特位】代表一个【字符,一个 int 类型的变量 32 位足够表示所有的小写字母。比特位里面如果是 0,表示这个字符没有出现过。比特位里面的值是 1,表示该字符出现过。
那么我们就可以用一个【整数】来充当【哈希表】。
C++算法代码:
class Solution {
public:
bool isUnique(string astr) {
if(astr.size()>26) return false;
int m=0;
for(auto& s:astr)
{
if((m>>(s-'a'))&1) return false;
else m|=(1<<(s-'a'));
}
return -1;
}
};
算法总结&&笔记展示:
笔记字有点丑,大家见谅:

35. 丢失的数字
题目链接:
题目描述:
题目示例:
解法(位运算):
算法思路:
设数组的大小为 n ,那么缺失之前的数就是【0,n】,数组中是在【0,n】中缺失一个数形成的序列
如果我们把数组中的所有数,以及【0,n】中的所有数全部【异或】在一起,那么根据【异或】运算的【消消乐】规律,最终的异或结果应该就是缺失的数~
C++算法代码:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int ret=0;
for(auto& n:nums)
ret^=n;
for(size_t i=0;i<=nums.size();i++)
ret^=i;
return ret;
}
};
算法总结&&笔记展示:
笔记字有点丑,大家见谅:

结尾:
我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点:
【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长
❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量
⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用
【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑
️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解
技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标!
结语:本文聚焦位运算算法题实战,通过两道经典例题讲解位图与异或技巧。34题利用位图思想,用整数比特位标记字符出现情况,实现O(1)空间复杂度判断字符唯一性。35题运用异或消消乐特性,通过数组与完整序列异或找出缺失数字。笔记图解辅助理解位运算核心逻辑,适合快速掌握高效解题策略。
✨把这些内容吃透超牛的!放松下吧✨ ʕ˘ᴥ˘ʔ づきらど

浙公网安备 33010602011771号