leetcode-位运算题型

C++ 中的位运算符主要用于对整数的二进制表示进行操作。这些操作效率高,常用于嵌入式开发、图形学、算法优化等场景。以下是 C++ 中的几种常见位运算符及一些常用的二进制操作:

1. 位运算符

1.1 按位与 &

按位与操作符 & 会将两个整数的每一位进行 与操作。只有当对应位都是 1 时,结果才为 1。

int a = 6; // 二进制: 110 
int b = 3; // 二进制: 011 
int result = a & b; // 结果为 2 (二进制: 010)

1.2 按位或 |

按位或操作符 | 会将两个整数的每一位进行 或操作。只要有一个对应位是 1,结果就为 1。

int a = 6;  // 二进制: 110
int b = 3;  // 二进制: 011
int result = a | b;  // 结果为 7 (二进制: 111)

1.3 按位异或 ^

按位异或操作符 ^ 会将两个整数的每一位进行 异或操作。当对应位不同,结果为 1;相同则为 0。

int a = 6;  // 二进制: 110
int b = 3;  // 二进制: 011
int result = a ^ b;  // 结果为 5 (二进制: 101)

1.4 按位取反 ~

按位取反操作符 ~ 会将数的每一位取反(0 变成 1,1 变成 0)。

int a = 6;  // 二进制: 0000 0110
int result = ~a;  // 结果为 -7 (二进制: 1111 1001)

1.5 左移 <<

左移操作符 << 会将数的所有位向左移动指定的位数,右侧补 0。左移相当于乘以 2。

int a = 3;  // 二进制: 11
int result = a << 2;  // 结果为 12 (二进制: 1100)

1.6 右移 >>

右移操作符 >> 会将数的所有位向右移动指定的位数。对正数,右侧补 0;对负数,视编译器和机器的实现。

int a = 12;  // 二进制: 1100
int result = a >> 2;  // 结果为 3 (二进制: 11)

2. 常用的二进制操作

2.1 判断奇偶性

如果一个数的最低位为 1,则为奇数;最低位为 0,则为偶数。

bool isOdd = (num & 1) == 1;

2.2 计算整数的二进制中 1 的个数(位计数)

int countOnes(int num) {int count = 0;while (num) {count += num & 1;num >>= 1;}return count;
}

或者更高效的方法(利用 num & (num - 1) 清除最低位的 1):

int countOnes(int num) {int count = 0;while (num) {num = num & (num - 1);count++;}return count;
}

2.3 判断一个数是否是 2 的幂

一个数若是 2 的幂,那么它的二进制表示中只有一个 1。

bool isPowerOfTwo(int num) {return num > 0 && (num & (num - 1)) == 0;
}

2.4 将第 k 位设置为 1

num |= (1 << k);

2.5 将第 k 位设置为 0

num &= ~(1 << k);

2.6 检查第 k 位是否为 1

bool isKthBitSet = (num & (1 << k)) != 0;

3.题目

136. 只出现一次的数字

137. 只出现一次的数字 II 

哈希法

class Solution {
public:int singleNumber(vector<int>& nums) {unordered_map<int, int> hash;for(int i=0; i< nums.size(); i++){if(hash.find(nums[i]) == hash.end()){hash[nums[i]]++;}else if(hash[nums[i]] == 2){hash.erase(nums[i]);}else{hash[nums[i]]++;}}int ans;for(auto [i,j] : hash){ans = i;}return ans;}
};

421. 数组中两个数的最大异或值

187. 重复的DNA序列 

318. 最大单词长度乘积 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471446.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

catchadmin-webman 宝塔 部署

1&#xff1a;宝塔的php 中删除禁用函数 putenv 问题&#xff1a; 按照文档部署的时候linux&#xff08;php&#xff09; vue (本地) 无法访问后端api/login 的接口 。 解决办法&#xff1a; webman 没有配置nginx 反向代理 配置就能正常访问了

【AutoGen 】简介

学习笔记AutoGen。它可以使用多个代理来开发 LLM 应用程序,这些代理可定制、可相互对话,可在各种模式下运行,且无缝允许人的参与,进一步在更大程度上为开发者提供助力。AutoGen 智能应用开发(一)|AutoGen 基础 学习笔记

【月之暗面kimi-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

统信UOS开发接口DTK

DTK(Development ToolKit)是基于 Qt 开发的简单且实用的通用开发框架。提供丰富的开发接口与支持工具,能有效提升开发效率。 文章目录 一、简介DTK 常见模块介绍概述二、框架创建开发环境准备使用 cmake三、常见模块窗口和对话框一、简介 DTK 常见模块介绍 概述 DTK(Dev…

城市轨道交通数据可视化的应用与优势

通过图扑可视化技术将复杂的数据转化为易于理解的图像&#xff0c;助力交通管理者优化线路规划、提升运营效率和乘客信息服务。轨道交通管理者能够更直观地分析乘客流量、运营效率等关键指标&#xff0c;从而优化线路设计与调度&#xff0c;提高服务质量&#xff0c;为乘客提供…

【JavaEE初阶 — 多线程】生产消费模型 阻塞队列

1. 阻塞队列 (1) 阻塞队列 1. 概念 阻塞队列是一种特殊的队列&#xff0c;也遵守"先进先出"的原则&#xff1b;阻塞队列能是一种线程安全的数据结构&#xff0c;主要用来阻塞队列的插入和获取操作&#xff1a; 当队列满了的时候&#xff0c;插入操作会被…

重构开发之道,Blackbox.AI为技术注入智能新动力

本文目录 一、引言二、Blackbox.AI实战体验2.1 基于网页界面生成前端代码进行应用开发2.2 与AI助手实现实时智能对话2.3 重塑大型文件交互方式2.4 链接Github仓库进行对话编程 三、总结 一、引言 在生产力工具加速进化的浪潮中&#xff0c;Blackbox.AI开始崭露头角&#xff0c…

idea 弹窗 delete remote branch origin/develop-deploy

想删除远程分支&#xff0c;就选delete&#xff0c;仅想删除本地分支&#xff0c;选cancel&#xff1b; 在 IntelliJ IDEA 中遇到弹窗提示删除远程分支 origin/develop-deploy&#xff0c;这通常是在 Git 操作过程中出现的情况&#xff0c;可能是在执行如 git branch -d 或其他…

第四十五章 Vue之Vuex模块化创建(module)

目录 一、引言 二、模块化拆分创建方式 三、模块化拆分完整代码 3.1. index.js 3.2. module1.js 3.3. module2.js 3.4. module3.js 3.5. main.js 3.6. App.vue 3.7. Son1.vue 3.8. Son2.vue 四、访问模块module的state ​五、访问模块中的getters ​六、mutati…

【OpenEuler】配置虚拟ip

OpenEuler系统手动配置虚ip 介绍操作方法临时生效永久生效 验证 介绍 我们知道通过keepalived服务可以为linux服务器设置虚拟ip&#xff0c;但是有些特殊场景下若无法安装部署keepalived服务&#xff0c;则需要通过手动设置的方式&#xff0c;配置服务器的虚拟ip。 本方案提供…

CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集

摘要 我们介绍了 CCI3.0-HQ&#xff0c;它是中文语料库互联网 3.0&#xff08;CCI3.0&#xff09;的一个高质量500GB子集&#xff0c;采用新颖的两阶段混合过滤管道开发&#xff0c;显著提高了数据质量。为了评估其有效性&#xff0c;我们在不同数据集的100B tokens上从头开始…

fastadmin多个表crud连表操作步骤

1、crud命令 php think crud -t xq_user_credential -u 1 -c credential -i voucher_type,nickname,user_id,voucher_url,status,time --forcetrue2、修改控制器controller文件 <?phpnamespace app\admin\controller;use app\common\controller\Backend;/*** 凭证信息…

安装SQL server中python和R

这两个都是编程语言 R 是一种专门为统计计算和数据分析而设计的语言&#xff0c;它具有丰富的统计函数和绘图工具&#xff0c;常用于学术研究、数据分析和统计建模等领域。 Python 是一种通用型编程语言&#xff0c;具有简单易学、语法简洁、功能强大等特点。它在数据科学、机…

项目技术栈-解决方案-web3去中心化

web3去中心化 Web3 DApp区块链:钱包:智能合约:UI:ETH系开发技能树DeFi应用 去中心化金融P2P 去中心化网络参考Web3 DApp 区块链: 以以太坊(Ethereum)为主流,也包括Solana、Aptos等其他非EVM链。 区块链本身是软件,需要运行在一系列节点上,这些节点组成P2P网络或者半…

【linux】centos7 换阿里云源

查看yum配置文件 yum的配置文件通常位于/etc/yum.repos.d/目录下。你可以使用以下命令查看这些文件&#xff1a; ls /etc/yum.repos.d/ # 或者 ll /etc/yum.repos.d/备份当前的yum配置文件 建议备份当前的yum配置文件&#xff1a; sudo cp /etc/yum.repos.d/CentOS-Base.re…

Python 中.title()函数和.lower()函数

一.title()函数 1.title()函数的功能 将字符串中的每一单词的首字母大写 2.举例 S1"i love you" S2S1.title() print(S2)3.输出 二.lower()函数 1.lower()函数的功能 将字符串中的每一大写字母都变成的小写字母 2.举例 S1"I LOVE YOU" S2S1.lower()…

[DEBUG] 服务器 CORS 已经允许所有源,仍然有 304 的跨域问题

背景 今天有一台服务器到期了&#xff0c;准备把后端迁移到另一台服务器上&#xff0c;结果前端在测试的时候&#xff0c;出现了 304 的跨域问题。 调试过程中出现的问题&#xff0c;包括但不限于&#xff1a; set the request’s mode to ‘no-cors’Redirect is not allow…

【AI构思渲染】网络直播——建筑绘图大模型生成渲染图

家人们&#xff01;&#xff01;好消息来了&#xff01;&#xff01; 2024年11月19日&#xff0c;上午10:00-11:00 构力学堂将会给大家带来一场直播课《AI构思渲染第一课&#xff0c;建筑绘图大模型生成渲染图》 课程亮点&#xff1a; 1、AI插件相关介绍 2、AI构思渲染安装…

初级数据结构——栈

目录 前言一、栈的基本概念二、栈的实现方式三、栈的性能分析四、栈的应用场景五、栈的变体六、出栈入栈的动态图解七、代码模版八、总结结语 前言 数据结构栈&#xff08;Stack&#xff09;是一种线性的数据结构&#xff0c;它只允许在序列的一端&#xff08;称为栈顶&#x…

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

前言 在现代前端开发中&#xff0c;代码质量与代码风格的统一是两个非常重要的方面。良好的代码质量能减少 bug 的产生&#xff0c;而统一的代码风格则能提高团队协作的效率。为了实现这两个目标&#xff0c;我们通常会使用一些工具。 为了保证代码的可读性和维护性&#xff0…