跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

位运算实战:判断字符唯一性与查找缺失数字

位运算实战通过两道经典算法题讲解核心技巧。第一题利用位图思想,用整数比特位标记字符出现情况,实现 O(1) 空间复杂度判断字符唯一性。第二题运用异或消消乐特性,通过数组与完整序列异或找出缺失数字。适合快速掌握高效解题策略。

板砖工程师发布于 2026/3/15更新于 2026/6/1024 浏览
位运算实战:判断字符唯一性与查找缺失数字

算法位图示意

判断字符是否唯一

题目描述: 给定一个字符串,判断其中所有字符是否都是唯一的。没有使用额外的数据结构。

题目示例

解题思路

这道题的核心在于利用【位图】的思想。既然只涉及小写字母,我们可以用一个整数类型的变量来充当哈希表。一个 int 类型有 32 位,足够表示所有的小写字母(26 个)。

具体做法是:每一个比特位代表一个字符。如果某一位是 0,说明该字符还没出现过;如果是 1,说明已经出现过了。遍历字符串时,检查对应位的状态即可。

这里有个细节要注意:如果字符串长度超过 26,根据鸽巢原理,必然存在重复字符,可以直接返回 false。

C++ 代码实现

class Solution {
public:
    bool isUnique(string astr) {
        // 超过 26 个字符必然有重复
        if (astr.size() > 26) return false;
        
        int mask = 0;
        for (auto& c : astr) {
            int val = c - 'a';
            // 检查第 val 位是否为 1
            if ((mask >> val) & 1) return false;
            // 将第 val 位设为 1
            mask |= (1 << val);
        }
        return true;
    }
};

位图逻辑图解 位运算过程

丢失的数字

题目描述: 给定包含 n 个不同数字的数组,这些数字取自 [0, 1, ..., n],找出那个缺失的数字。

题目示例

解题思路

这道题用异或运算非常巧妙。假设数组长度为 n,完整的序列应该是 [0, 1, ..., n]。

如果我们把数组中的所有元素,以及完整序列 [0, n] 中的所有数字全部进行异或操作,根据异或的'消消乐'性质(相同数字异或为 0),成对出现的数字都会抵消掉,最终剩下的结果就是那个缺失的数字。

这种方法不需要额外空间,时间复杂度也是线性的。

C++ 代码实现

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int ret = 0;
        // 先与数组中所有元素异或
        for (auto& n : nums) ret ^= n;
        // 再与 0 到 n 的所有数字异或
        for (size_t i = 0; i <= nums.size(); i++) ret ^= i;
        return ret;
    }
};

异或逻辑图解 异或计算过程

目录

  1. 判断字符是否唯一
  2. 解题思路
  3. C++ 代码实现
  4. 丢失的数字
  5. 解题思路
  6. C++ 代码实现
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型商业化能力成竞争关键:百度文心实践分析
  • 昇腾 CANN 技术栈解析:不同场景下的语言选型指南
  • Python 数据科学基础:NumPy 入门详细教程
  • 飞算 JavaAI 实战测评:重塑 Java 开发工作流
  • HomeAssistant 海尔智能家居集成插件使用指南
  • Windows 下 Python 包管理工具 uv 安装与 VSCode 配置指南
  • FAIR plus 2026 机器人全产业链接会前瞻
  • C++ 入门:发展历史、命名空间与输入输出详解
  • Circle Loss:统一 Softmax 与 Triplet 的优化视角
  • 【GitHub项目推荐--Webnovel Writer:基于Claude Code的长篇网文AI创作系统】⭐
  • Python 鸭子类型:动态类型的核心概念与实践
  • 大模型与生成式 AI 的发展脉络及应用安全思考
  • Vue 动态组件实战:利用 <component> 实现视图切换
  • GitHub 私有仓库转换为公共仓库的操作指南
  • RouterOS 7.21 容器化部署:集成 ModSecurity 的 WAF 实战
  • VS Code 配置 GitHub Copilot Agent Skills 实战指南
  • Apache IoTDB 数据删除:从单点精准清除到企业级生命周期管理
  • MySQL 下载安装与配置完整指南
  • CSS 实现毛玻璃模糊背景效果
  • 飞书机器人与Claude Code交互:从手机指令到AI处理的全自动流程

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online