极客大学算法训练营覃超第十六课.docxVIP

极客大学算法训练营覃超第十六课.docx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
极客大学算法训练营 第十六课 位运算 覃超 Sophon Tech 创始?,前 Facebook ?程师 目录 ? 位运算符 ? 位运算的应用 为什么需要位运算 ? 机器里的数字表示方式和存储格式就是 二进制 ? 十进制 — 二进制 : 如何转换? / %E4%BB%8E%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC% E6%8D%A2%E4%B8%BA%E4%BA%8C%E8%BF%9B%E5%88%B6 4(d): 0100 8(d): 01000 5(d): 0101 6(d): 0110 位运算符 含义 运算符 示例 左移 0011 = 0110 右移 0110 = 0011 位运算符 含义 运算符 示例 1 按位与 0011 ------- = 0011 1011 按位取反 ~ 0011 = 1100 按位异或(相同为零不同为一) ^ 0011 ------- = 1000 1011 XOR - 异或 异或:相同为 0,不同为 1。也可用“不进位加法”来理解。 异或操作的一些特点: x ^ 0 = x x ^ 1s = ~x // 注意 1s = ~0 x ^ (~x) = 1s x ^ x = 0 c = a ^ b = a ^ c = b, b ^ c = a // 交换两个数 a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c // associative 指定位置的位运算 1. 将 x 最右边的 n 位清零:x (~0 n) 2. 获取 x 的第 n 位值(0 或者 1): (x n) 1 3. 获取 x 的第 n 位的幂值:x (1 (n -1)) 4. 仅将第 n 位置为 1:x | (1 n) 5. 仅将第 n 位置为 0:x (~ (1 n)) 6. 将 x 最高位至第 n 位(含)清零:x ((1 n) - 1) 7.将第 n 位至第 0 位(含)清零:x (~ ((1 (n + 1)) - 1)) 实战位运算要点 ? 判断奇偶: x % 2 == 1 — (x 1) == 1 x % 2 == 0 — (x 1) == 0 ? x 1 — x / 2 即: x = x / 2; — x = x 1; mid = (left + right) / 2; — mid = (left + right) 1; ? X = X (X-1) 清零最低位的 1 ? X -X = 得到最低位的 1 ? X ~X = 0 实战题目 / / / ? /problems/n-queens/description/ / N皇后的位运算解法 - Python def totalNQueens(self, n): if n 1: return [] self.count = 0 self.DFS(n, 0, 0, 0, 0) return self.count def DFS(self, n, row, cols, pie, na): # recursion terminator if row = n: self.count += 1 return bits = (~(cols | pie | na)) ((1 n) — 1) # 得到当前所有的空位 while bits: p = bits —bits # 取到最低位的1 bits = bits (bits — 1) # 表示在p位置上放?皇后 self.DFS(n, row + 1, cols | p, (pie | p) 1, (na | p) 1) # 不需要revert cols, pie, na 的状态 J ava class Solution { private int size; private int count; private void solve(int row, int ld, int rd) { if (row == size) { count++; return; } int pos = size (~(row | ld | rd)); while (pos != 0) { int p = pos (-pos); pos -= p; // pos = pos - 1; solve(row | p, (ld | p) 1, (rd | p) 1); } } public int totalNQueens(int n) { count = 0; size = (1 n) - 1; solve(0, 0, 0); return count; } } DP + 位运算 LeetCode 338: / 代码 vectorint

您可能关注的文档

文档评论(0)

原创文库 + 关注
实名认证
文档贡献者

电子图像处理技能证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年04月20日上传了电子图像处理技能证

1亿VIP精品文档

相关文档