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

🎬 博主简介:

文章目录
- 前言:
- 位运算基础前置知识
- 34. 判断字符是否唯一
- 解法(位图的思想):
- 算法思路:
- C++算法代码:
- 算法总结&&笔记展示:
- 35. 丢失的数字
- 解法(位运算):
- 算法思路:
- C++算法代码:
- 算法总结&&笔记展示:
- 结尾:
前言:
聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。
位运算基础前置知识

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

题目示例:

解法(位图的思想):
算法思路:
利用【位图】的思想,每一个【比特位】代表一个【字符,一个 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. 丢失的数字
题目链接:
268. 丢失的数字 - 力扣(LeetCode)
题目描述:

题目示例:

解法(位运算):
算法思路:
设数组的大小为 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题运用异或消消乐特性,通过数组与完整序列异或找出缺失数字。笔记图解辅助理解位运算核心逻辑,适合快速掌握高效解题策略。
✨把这些内容吃透超牛的!放松下吧✨ ʕ˘ᴥ˘ʔ づきらど

