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

哪里有做独立网站的服务器班级优化大师学生版

哪里有做独立网站的服务器,班级优化大师学生版,wordpress 二级排序,品牌推广与传播怎么写目录 1 什么是位运算?2 67. 二进制求和3 136. 只出现一次的数字4 137. 只出现一次的数字 II5 201. 数字范围按位与 1 什么是位运算? ✒️ 源自:位运算 - 菜鸟教程 在现代计算机中,所有数据都以二进制形式存储,…

目录

    • 1 什么是位运算?
    • 2 67. 二进制求和
    • 3 136. 只出现一次的数字
    • 4 137. 只出现一次的数字 II
    • 5 201. 数字范围按位与




1 什么是位运算?

✒️ 源自:位运算 - 菜鸟教程

在现代计算机中,所有数据都以二进制形式存储,即 0 0 0 1 1 1 两种状态。计算机对二进制数据进行的运算(如:加、减、乘、除)被称为位运算,即对二进制数的每一位进行操作的运算。

为了更好地理解位运算,举个简单的例子:假设我们有如下代码进行两个整数的加法运算:

int a = 35;
int b = 47;
int c = a + b;

计算机会将这两个整数转换为二进制形式,然后进行加法运算:

35:  0010 0011
47:  0010 1111
--------------
82:  0101 0010

因此,与直接使用 + + + − - ∗ * / / / 运算符相比,合理运用位运算可以显著提高代码在机器上的执行效率。

✒️ 位运算概览

符号描述运算规则
&两个位都为 1 时,结果才为 1
|两个位都为 0 时,结果才为 0
^异或两个位相同为 0,相异为 1
~取反0 变 1,1 变 0
<<左移各二进制位全部左移若干位,高位丢弃,低位补 0
>>右移各二进制位全部右移若干位,高位补 0 或符号位补齐


2 67. 二进制求和

假设需要计算 a a = 111 aa=111 aa=111 b b = 101 bb=101 bb=101 的和,那么可以将每一位的计算结果分为本位和进位:

在这里插入图片描述

让我们从右往左看整个计算过程:

  • ① 首先是 1 + 1 1+1 1+1,本位是 0 0 0,进位是 1 1 1
  • ② 然后是 1 + 0 1+0 1+0,本位是 1 1 1,进位是 0 0 0
  • ③ 最后是 1 + 1 1+1 1+1,本位是 0 0 0,进位是 1 1 1

通常会在 ② 中加上 ① 产生的进位,即在处理当前位的时候考虑上一位的进位。与之相反,我们不单独考虑进位,而是对进位进行统一处理,即先计算出所有的本位以及所有的进位,再对二者进行求和。

继续来看上面的计算过程,我们已经得到:

  • 本位 = 0...0010 =0...0010 =0...0010
  • 进位 = 0...1010 =0...1010 =0...1010

然后再计算本位和进位的和,得到新的本位和进位。重复上述操作,直到进位为 0 0 0,即没有进位时为止。

核心代码

auto ans = aa ^ bb;  // 按位异或计算本位
auto carry = (aa & bb) << 1;  // 按位与计算进位

其中变量 a n s \mathrm{ans} ans 用于存储所有本位,变量 c a r r y \mathrm{carry} carry 用于存储所有进位。

由于进位是指进到更高的一位,因此需要对按位与的结果进行左移一位的操作。

完整代码

string addBinary(string a, string b) {// 转换为二进制串auto aa = bitset<10001>(a);auto bb = bitset<10001>(b);// 求和while (bb != 0) {auto ans = aa ^ bb;auto carry = (aa & bb) << 1;aa = ans;bb = carry;}// 去除多余的前缀零string ans = aa.to_string();int pos = ans.find('1');if (pos > ans.size()) ans = "0";else ans = ans.substr(pos);return ans;
}


3 136. 只出现一次的数字

题目信息:除了某个元素只出现一次以外,其余每个元素均出现两次,找出那个只出现了一次的元素。

假设元素分别为 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an,根据异或操作的定义可知:

a i ⊗ a i = 0 a_i \otimes a_i = 0 aiai=0

如果是 a 7 a_7 a7 元素只出现了一次,那么有:

a 1 ⊗ a 2 ⊗ . . . ⊗ a 7 ⊗ . . . ⊗ a n = 0 ⊗ a 7 ⊗ 0 = a 7 a_1 \otimes a_2 \otimes ... \otimes a_7 \otimes ... \otimes a_n = 0 \otimes a_7 \otimes 0 = a_7 a1a2...a7...an=0a70=a7

因此,我们只要对所有元素进行异或,就能找出那个只出现了一次的元素。

完整代码

int singleNumber(vector<int>& nums) {int ans = 0;for (auto & num : nums)ans ^= num;return ans;
}


4 137. 只出现一次的数字 II

本题一看就是上一题的姊妹题,但是完全不能用上一题的思路做。

本题思路:对于数组中非答案的元素,每一个元素都出现了 3 3 3 次,对应着第 i i i 个二进制位的 3 3 3 0 0 0 3 3 3 1 1 1。无论是哪一种情况, 0 0 0 1 1 1 的个数都是 3 3 3 的倍数。现在计算所有元素的第 i i i 个二进制位为 1 1 1 的个数,如果不为 3 3 3 的倍数,那么多余的 1 1 1 一定是答案的第 i i i 个二进制位提供的,即答案的第 i i i 个二进制位为 1 1 1;否则为 0 0 0

说明:“答案” 是指那个只出现了一次的元素。

完整代码

int singleNumber(vector<int>& nums) {int ans = 0;for (int i = 0; i < 32; ++i) {int cnt = 0;for (auto & num : nums) {if (num >> i & 1)++cnt;}if (cnt % 3 == 1)ans |= 1 << i;}return ans;
}

这种解法属于是通用解法了,完全可以用来解决上一题。不过思路这么繁琐,我用哈希表不香吗 😇



5 201. 数字范围按位与

假设 l e f t \mathrm{left} left r i g h t \mathrm{right} right 的前 i i i 位相同,由于 l e f t < r i g h t \mathrm{left<right} left<right 且第 i + 1 i+1 i+1 位不同,因此 l e f t \mathrm{left} left 的第 i + 1 i+1 i+1 位必为 0 0 0 r i g h t \mathrm{right} right 的第 i + 1 i+1 i+1 位必为 1 1 1(从左往右数)。由于前 i i i 位相同,因此按位与的结果等于前 i i i 位本身。如下图所示:

在这里插入图片描述

对于第 i + 1 i+1 i+1 位及剩余的位,因为从 0... . . . . 0...\ .... 0... .... 1... . . . . 1...\ .... 1... .... 必然会经过 1000 0000 1000\ 0000 1000 0000,因此按位与的结果一定为 0000 0000 0000\ 0000 0000 0000。通过上述分析可知,我们只需要找出前 i i i 位相同的部分,剩余的位置为 0 0 0 即可。

完整代码

int rangeBitwiseAnd(int left, int right) {int ans = 0;int pos = 1 << 30;while (pos > 0 && ((left & pos) == (right & pos))) {ans |= (left & pos);pos >>= 1;}return ans;
}

其中变量 p o s \mathrm{pos} pos 从高位到低位,逐位比较 l e f t \mathrm{left} left r i g h t \mathrm{right} right 是否相同。



http://www.ds6.com.cn/news/7487.html

相关文章:

  • 娱乐网站模板自媒体平台大全
  • 网站建设技术文章兰州seo培训
  • 模板网站建设服务商b2b免费外链发布
  • 南山做棋牌网站建设全媒体运营师培训费用
  • 设计网站兼职赚钱2023年的新闻时事热点论文
  • server 2012 做网站二级域名在线扫描
  • 粉丝网站制作网站怎么创建
  • wordpress登录样式济南专业seo推广公司
  • 温州注册网络公司优化网站视频
  • 济南建网站哪家好站长工具无内鬼放心开车禁止收费
  • 站群网站seo的排名机制
  • 易企秀怎么做网站链接免费精准客源
  • html5微网站源码百度注册入口
  • 哪个网站用户体验较好郑州优化网站关键词
  • 毕设 做网站环球军事网最新消息
  • 网站慢用台服务器做跳板网上怎么发布广告
  • 济南集团网站建设方案开发新客户的十大渠道
  • 专业网站推广引流点击器免费版
  • 上海营销型网站报价苏州网站seo服务
  • 网站建设的费用是不是含税的seo关键词优化方法
  • 黄骅做网站_黄骅昊信科技|黄骅网站|黄骅网站开发|黄骅微信|黄骅网络公司排名
  • 一家专门做瓷砖特卖的网站百度推广开户公司
  • 潍坊模板建站定制长沙自动seo
  • 唐山住房城乡建设局门户网站百度趋势搜索大数据
  • 服装公司网站多少钱网站推广在线推广
  • 没有服务器做网站口碑营销案例分析
  • 企业网站建设的襄阳网站推广优化技巧
  • 湖州做网站搜索引擎技术
  • 曼朗策划响应式网站建设2023年国际新闻大事件10条
  • 政府网站栏目架构seo搜索引擎优化工具