| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法刷题:位运算及其他拓展 -> 正文阅读 |
|
[数据结构与算法]算法刷题:位运算及其他拓展 |
文章目录前言本文记录笔者在刷题过程中碰到的能够用位运算快速解决的问题,使用位运算能够帮助自己更快地解决一些问题,以下是笔者对位运算的一些理解和刷题记录 一、位运算为什么快在算法刷题和实际工程编写时,我们经常会提及位运算的时间和效率都高于其他运算,那么为什么位运算会比其他运算在效率上更具有优势呢, 笔者认为原因大致如下
参考维基百科
需要注意的是,位运算通常在大量的运算中,才能体会出其时间和空间上的效率性,单独或者小批量的运算指令,位运算相比较乘除法指令效率相差不大,甚至在某些虚拟机上实验上劣于乘除法指令 二、相关算法题目1.Leetcode136 数组中只出现一次的两个数字这道题就是一个数组中,其他数都出现了两次,但是只有一个数出现了任意一次,求这个数
要想理解这道题的关键在于两点
2.NC75 数组中只出现一次的两个数字这道题和上道leetcode题的不同点在于,Leetcode题目中相关数组中的其他元素都出现了两次,只有一个元素只出现了一次,但是在本题目中,有两个元素出现了一次,其他元素都出现了两次,解题的关键是如何对原数组进行分组,从而得到那两个元素
思路 设我们要搜寻的两个只出现一次的数的异或结果分别为数A和数B
3.数组中有只出现一次的一个数字,其他数字均出现了三次这道题的描述比较简单,我就直接以文字的形式放出了: 要想做这道题,我们要理解位运算的本质是在计算机中每一个数都是由二进制表示的每一位拼合而成,那因为其他的数字都出现了3次,所以我们其实只要对出现的数的每一位进行统计,而后筛选哪一位出现的次数的大于3次,即可得到相关的结果 代码如下(示例):
三、位运算的其他应用颜色转换通常情况下,在开发过程中,我们需要对颜色编码格式进行转换 例如,某些场景下,我们需要对设计同学给出的二进制数据转换为十六进制数据,那么最快捷的做法便是采用位运算进行 在这种情况下,我们只需把对应位的值转换为10进制然后/255.0f就可得到RGB色彩值 相关代码
还有一些场景下,我们需要对ARGB_8888的数据转换为只保存RGB的数据,那么其实我们只要取低24位的数据即可,那么这种情况下,其实我们只要将颜色与0xffffff &一下,即可得到ARGB数据中的RGB数据,而0xffffff其实就是白色,所以这其实也是颜色转换的奇妙之处 加密在某些场景下,我们可以通过异或进行加密,具体如下
其他应用
总结以上就是笔者关于位运算的理解,位运算其实还有许多其他的应用,但本质都是计算机中的数都是使用二进制进行存储,欢迎读者进行补充 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:36:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |