当前位置: 首页 > wzjs >正文

网站建设目的和功能定位莱西网站制作联赛与超

网站建设目的和功能定位,莱西网站制作联赛与超,wordpress 全屏图片,企业网站建设套餐上海本篇文章&#xff0c;我们一起来学习如何巧妙的使用位运算符来解决算法题。 位运算符包括&#xff1a; >>&#xff08;右移&#xff09;&#xff1a;将一个整型的所有比特位向右移动&#xff0c;最左侧补0。<<&#xff08;左移&#xff09;&#xff1a;将一个整型…

本篇文章,我们一起来学习如何巧妙的使用位运算符来解决算法题。

位运算符包括:

  • >>(右移):将一个整型的所有比特位向右移动,最左侧补0。
  • <<(左移):将一个整型的所有比特位向左移动,最右侧补0。
  • |(按位或):a | 0 = a ,a | a = a。
  • &(按位与):a & 0 = 0 ,a & a = a。
  • ^(按位异或):相同为0,相异为1。
  • ~(按位取反):将一个整型的所有比特位取反,0变1,1变0。

一.判定字符是否唯一

来看题目(出自力扣):

题目要求判断一个字符串中是否存在相同的字符,如果存在就返回false,不存在就返回true

 这道题乍一看非常简单,只需要使用一个哈希表遍历字符串然后存储所有的字符,然后判断某字符是否在哈希表中已经存在即可。

但是这是一道面试题,如果我们不使用包含哈希表在内的各种数据结构,就会很加分,那么又该如何解决题目呢???

这时候就出现一个关键信息,字符串中只包含小写字母

小写字母一共有26个,那么我们不就可以把字符转换成数字,随后用位图充当哈希表来判断,是不是就同样能够解决问题啦。

位图思想就是将一个整型结构的所有比特位用于表示某个数据是否出现过如果该比特位为0,表示没有出现过,如果为1,就表示该数据出现过,那么本题就可以使用int类型的32个比特位的前26位来表示每个字符是否出现过

同时有一处细节可以优化,因为小写字母只有26个,所以如果字符串的长度超出26,那么说明该字符串中肯定存在重复字符,那么我们就无需在进行后续判断了。 

    bool isUnique(string astr) {if(astr.size() > 26)return false;int temp = 0;for(auto e : astr){int i = e - 'a';if(((temp >> i) & 1) == 0)temp = temp | (1 << i);elsereturn false;}return true;}

在位图中,比特位的下标也是从0开始的。 

  • (temp >> i) & 1 :能够用于判断位图中的第 i 位是0还是1。
  • temp | (1 << i) :能够将位图中的第 i 位设为1。

二.消失的数字

来看题目(出自力扣):

题目非常简单,就是让我们找出数组nums中缺失的 [0,n]范围内的某个数字

本题依然可以使用哈希表遍历数组记录的方法,最后寻找哪一个数字没有出现在哈希表中。

此外,由于本题限制的数字最大为10^4,所以我们也可以采用高斯求和,将[0,n]范围内的所有数字相加,再减去数组中的所有元素,即可得到结果。

除了这两种方法之外,我们还可以通过位运算的方法。

    int missingNumber(vector<int>& nums) {int n = nums.size();int ret = 0;for(auto i : nums)ret ^= i;while(n)ret ^= n--;return ret;}

我们知道,^异或运算是一个消消乐,相同的元素异或到一起会抵消为0,不同的元素异或在一起则会保留

因此,我们只需要将[0,n]范围内的数字以及数组中的所有元素异或在一起,最终被保留下来的,就是消失的数字。 


 三.两整数之和

来看题目(出自力扣):

题目要求我们不能使用算数运算符来求两个整数的和,那么本题,我们就尝试通过位运算来求两个整数的和。

我们要知道,两个整数相加,大概率要出现进位的情况,这种情况同样存在于二进制的运算中,来看一个例子:

如果是这两位数字的二进制相加,我们能够得出,不同的数字要保留,相同的1要向前一位进位,这是不是跟某些位运算很相似?

 如果我们将 14 和 23 进行异或运算,就能得到保留的数字,将 14 和 32 进行 & 运算之后,再左移一位,是不是就得到了要进位的数字

循环重复上述操作,直到进位为0,就能得到结果:

 

    int getSum(int a, int b) {int x = 0;int y = 0;while(1){x = a ^ b;y = (a & b) << 1;if(y == 0)break;a = x;b = y;}return x;}

位运算的使用,主要涉及到对整型类型的比特位的各种操作,遇到类似问题时,可以考虑使用位运算来解决问题。

http://www.dtcms.com/wzjs/786748.html

相关文章:

  • 网站备案后要做什么网站建设页面图
  • 付费阅读网站建设成都住建局官网官网官方
  • 泗阳县建设局网站磁力天堂torrentkitty
  • 杭州网站的制作自己做网站导航页
  • 空间建设网站免费做明信片的网站
  • 全国做网站找哪家好网站做游戏活动策划方案
  • 设计吧 网站wordpress更新文章收录
  • 芜湖网站建设全包仅需800元外贸建站模板下载
  • 特克斯与凯科斯群岛域名官方网站南京最新情况最新消息今天
  • 徐东网站建设设计师需要学历吗
  • 做外贸大一点的网站凡科官方网
  • 汝城网站建设公司wordpress网站程序
  • 成都网站设计招聘如何做购物返佣金网站
  • 找it工作有什么好的招聘网站超级seo工具
  • 网站开发工资多少钱qq空间是哪个公司开发的
  • 如何更换网站空间大连市建设工程招标网
  • 企业网站建设分工网站关键字 优帮云
  • 网站源码网址修改做网站的挣钱么
  • 小说网站开发背景wordpress照片评选
  • 合肥seo网站排名产品线上推广方式有哪些
  • 旅游网站开发实验报告重庆建设执业资格注册中心网站
  • 怎么做各个地图网站的认证商城站
  • 卧龙区微网站建设免费做房产网站
  • 有哪些可以做翻译兼职的网站吗wordpress 索引插件
  • 手机版网站建设合同网页空间是什么
  • 中信云做网站长沙制作公园仿竹护栏实体厂家
  • 联系客户做网站idc 公司网站模板
  • 开发软件的网站平台郑州app开发网站建设
  • wordpress 常用工具班级优化大师的功能
  • 湖北建设银行招标在哪个网站看仿站 做网站