![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
位运算
文章平均质量分 50
位运算
向光.
路过人间,绝非一瞬间.
展开
-
Leetcode.268. 丢失的数字——四法
268. 丢失的数字给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中原创 2021-12-10 12:08:28 · 554 阅读 · 0 评论 -
Leetcode.190. 颠倒二进制位---位运算
190. 颠倒二进制位颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。 示例 1:输入:n = 00000010100101000001原创 2021-11-16 19:36:52 · 116 阅读 · 0 评论 -
Leetcode.476. 数字的补数---位运算
476. 数字的补数对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。给你一个整数 num ,输出它的补数。示例 1:输入:num = 5输出:2解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。示例 2:输入:num = 1输出:0解释:1 的二进制表示为 1(没有前导零位),其补数为 0。原创 2021-11-01 19:33:52 · 83 阅读 · 0 评论 -
Leetcode.260. 只出现一次的数字 III---精妙的位运算
260. 只出现一次的数字 III给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nums = [-1,0]输出:[-1,0]示例 3:输入:nums = [0,1]输出:[1,0]提示:原创 2021-11-01 19:18:01 · 117 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数---位运算
剑指 Offer 15. 二进制中1的个数请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000原创 2021-06-24 09:47:45 · 77 阅读 · 0 评论 -
leetcode.401. 二进制手表---位运算+枚举
401. 二进制手表二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,下面的二进制手表读取 “3:25” 。给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。小时不会以零开头:例如,"01:00" 是无效的时间,正确的写法应该是 "1:00" 。分钟必须由两位数组成,可能会以零开头:例如,"原创 2021-06-21 15:53:29 · 116 阅读 · 0 评论 -
leetcode.1239. 串联字符串的最大长度---DFS回溯+位运算
1239. 串联字符串的最大长度给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。请返回所有可行解 s 中最长长度。示例 1:输入:arr = ["un","iq","ue"]输出:4解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 4。示例 2:输入:arr = ["cha","r","act","ers"]输出:6解释:可能原创 2021-06-19 20:35:19 · 141 阅读 · 0 评论 -
leetcode.342. 4的幂---位运算性质多法
342. 4的幂给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x示例 1:输入:n = 16输出:true示例 2:输入:n = 5输出:false示例 3:输入:n = 1输出:true 提示:-231 <= n <= 231 - 1 进阶:你能不使用循环或者递归来完成本题吗?题解:同昨天2的幂一样,方法有很多,我们原创 2021-05-31 16:50:04 · 96 阅读 · 0 评论 -
leetcode.231. 2 的幂---位运算特殊性质多法
231. 2 的幂给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false示例 4:输入:n = 4输出:true示例 5:输入:n = 5输出:false 提示:原创 2021-05-30 13:10:17 · 221 阅读 · 0 评论 -
leetcode.477. 汉明距离总和---排列组合与按位统计
477. 汉明距离总和两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。计算一个数组中,任意两个数之间汉明距离的总和。示例:输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)所以答案为:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.注意:原创 2021-05-28 20:56:35 · 130 阅读 · 0 评论 -
leetcode.461. 汉明距离---位运算
461. 汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。题解:方法一(工程法):JAVA:class Solution { public int hammingDist原创 2021-05-27 19:58:42 · 110 阅读 · 0 评论 -
leetcode.810. 黑板异或游戏---数学博弈论
810. 黑板异或游戏黑板上写着一个非负整数数组 nums[i] 。Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 (另外,如果只剩一个数字,按位异或运算得到它本身;如果无数字剩余,按位异或运算结果为 0。)换种说法就是,轮到某个玩家时,如果当前黑板上所有数字按位异或运算结果等于 0,这个玩家获胜。假设两个玩家每步都使用最优解,当且仅当 Alice 获胜时返回 true。示例:输入:原创 2021-05-22 11:11:40 · 166 阅读 · 2 评论 -
leetcode.1738. 找出第 K 大的异或坐标值---利用dp得到二维前缀异或
1738. 找出第 K 大的异或坐标值给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出 matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。示例 1:输入:matrix = [[5,2],[1,6]],原创 2021-05-19 20:22:38 · 146 阅读 · 2 评论 -
leetcode.1442. 形成两个异或相等数组的三元组数目---利用位运算的性质+前缀异或
1442. 形成两个异或相等数组的三元组数目给你一个整数数组 arr 。现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。a 和 b 定义如下:a = arr[i] ^ arr[i + 1] ^ … ^ arr[j - 1]b = arr[j] ^ arr[j + 1] ^ … ^ arr[k]注意:^ 表示 按位异或 操作。请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。示例 1原创 2021-05-18 19:05:17 · 136 阅读 · 0 评论 -
leetcode.1310. 子数组异或查询--- 前缀异或+位运算
1310. 子数组异或查询有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。并返回一个包含给定查询 queries 所有结果的数组。示例 1:输入:arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]输出:[2,原创 2021-05-12 20:03:31 · 115 阅读 · 0 评论 -
leetcode.1734. 解码异或后的排列----巧妙的位运算
1734. 解码异或后的排列给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。示例 1:输入:encoded = [3,1]输出:[1,2,3]解释:原创 2021-05-11 18:54:33 · 122 阅读 · 0 评论 -
leetcode.1486. 数组异或操作---位运算
1486. 数组异或操作给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。示例 1:输入:n = 5, start = 0输出:8解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。 "^" 为按位异或 XOR 运算符。示例 2:输入:n = 4原创 2021-05-07 17:22:22 · 112 阅读 · 0 评论 -
leetcode.1720. 解码异或后的数组---位运算
1720. 解码异或后的数组未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。示例 1:输入:encoded =原创 2021-05-06 18:36:53 · 92 阅读 · 0 评论 -
leetcode.137. 只出现一次的数字 II---三法解决(哈希,位运算,排序)
137. 只出现一次的数字 II给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,99]输出:99 提示:1 <= nums.length <= 3 * 104-231 <= nums[i] <= 231 - 1nums 中,除某个元素仅出现 一次 外,其余每个元素都原创 2021-05-01 17:33:22 · 136 阅读 · 0 评论 -
力扣 191. 位1的个数(位运算)
191. 位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:0000000原创 2021-03-23 08:29:23 · 127 阅读 · 0 评论 -
开学回归力扣:第五题—— 268. 丢失的数字(哈希+位运算+求和+排序)
268. 丢失的数字给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题? 示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有原创 2021-03-05 17:25:54 · 198 阅读 · 0 评论 -
力扣389. 找不同重写----三种方法(哈希,ascii码值,位运算)
389. 找不同给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。示例 2:输入:s = "", t = "y"输出:"y"示例 3:输入:s = "a", t = "aa"输出:"a"示例 4:输入:s = "ae", t = "aea"输出:"a"提示:0 &原创 2021-01-18 22:40:19 · 205 阅读 · 0 评论