位运算
文章平均质量分 58
位运算
Sophia_fez
干啥啥不行,可爱第一名.jpg
展开
-
leetcode 1758. 生成交替二进制字符串的最少操作数(2022.11.29)
交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’。可以分别对0开头的和1开头的计数,但是这两种情况合起来一定等于len,所以遍历一次计数一种就可以了。返回使 s 变成 交替字符串 所需的 最少 操作数。原创 2022-11-29 00:58:46 · 147 阅读 · 0 评论 -
leetcode 645. 错误的集合(2021.7.4)
【题目】645. 错误的集合集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。示例 1:输入: nums = [1,2,2,4]输出: [2,3...原创 2020-04-22 15:38:29 · 335 阅读 · 0 评论 -
leetcode *剑指 Offer 64. 求1+2+…+n(2020.6.2)
【题目】*剑指 Offer 64. 求1+2+…+n求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000【解题思路1】递归因为不能用 if 所以可以利用 && 的特性来作为递归出口以逻辑运算符 && 为例,对于 A && B原创 2020-09-29 23:05:33 · 197 阅读 · 0 评论 -
leetcode *剑指 Offer 56 - II. 数组中数字出现的次数 II(状态机)
【题目】【解题思路1】【解题思路2】原创 2020-09-29 17:36:52 · 178 阅读 · 0 评论 -
leetcode *剑指 Offer 56 - I. 数组中数字出现的次数(2020.4.28)& *260. 只出现一次的数字 III & 136. 只出现一次的数字 I(2020.4.28)
【题目】面试题56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]...原创 2020-04-22 17:24:56 · 391 阅读 · 0 评论 -
leetcode **37. 解数独(位运算待研究)(2020.9.15)
【题目】**37. 解数独编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。答案被标成红色。Note:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。【解题思路1】递归回溯class Solution { p原创 2020-09-15 11:12:51 · 197 阅读 · 0 评论 -
leetcode 461. 汉明距离
【题目】两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。题解:先用异或操作得到xor,xor...原创 2020-03-27 22:26:30 · 140 阅读 · 0 评论 -
leetcode *201. 数字范围按位与(2020.8.23)
【题目】*201. 数字范围按位与461. 汉明距离*201. 数字范围按位与给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0【解题思路1】位移得到公共前缀找规律可以发现,对所有数字执行按位与运算的结果是所有对应二进制字符串的公共前缀再用零补上后面的剩余位。证明:假设对于所有这些二进制串,前 i原创 2020-08-23 12:55:15 · 192 阅读 · 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原创 2020-06-25 11:34:27 · 248 阅读 · 0 评论 -
leetcode 67. 二进制求和(模拟二进制加法)(2020.6.23)
【题目】给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"【解题思路1】都转化为十进制,相加,然后转化为二进制,此方法适用于其他进制乃至不同进制的计算(事实上直接调用内部函数,...原创 2020-03-11 23:42:21 · 307 阅读 · 1 评论 -
leetcode 剑指 Offer 15. 二进制中1的个数 & 191. 位1的个数(位操作运算符表格)
【题目】编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:0000000000000000000000001000...原创 2020-03-27 21:28:35 · 166 阅读 · 0 评论 -
leetcode 面试题 16.07. 最大数值(待深究)
【题目】面试题 16.07. 最大数值编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。示例:输入: a = 1, b = 2输出: 2【解题思路1】位运算实现绝对值功能本质是平均值法: max(a, b) = ((a + b) + abs(a - b)) / 2class Solution { public int maximum(int a, int b) { long sum = (long)a + (long)b;原创 2020-06-05 13:20:26 · 232 阅读 · 0 评论 -
leetcode 面试题 05.07. 配对交换
【题目】面试题 05.07. 配对交换配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。示例1: 输入:num = 2(或者0b10) 输出 1 (或者 0b01)示例2: 输入:num = 3 输出:3提示:num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。【解题思路1】获取奇数位/偶数位再合并class Solution { public int exchangeBits(int n原创 2020-06-02 17:50:55 · 199 阅读 · 0 评论 -
leetcode *面试题64. 求1+2+…+n(未深究)
【题目】*面试题64. 求1+2+…+n求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000【解题思路1】直接调用函数class Solution { public int sumNums(int n) { return IntStream.rang原创 2020-06-02 16:27:27 · 177 阅读 · 0 评论 -
leetcode 面试题 05.06. 整数转换
【题目】面试题 05.06. 整数转换整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。示例1: 输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2示例2: 输入:A = 1,B = 2 输出:2提示:A,B范围在[-2147483648, 2147483647]之间【解题思路1】Integer.bitCount()即求A和B异或结果里1的个数class Solution { public int convertIn原创 2020-06-01 12:56:17 · 275 阅读 · 0 评论 -
leetcode 面试题 05.03. 翻转数位
【题目】面试题 05.03. 翻转数位给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。示例 1:输入: num = 1775(110111011112)输出: 8示例 2:输入: num = 7(01112)输出: 4【解题思路1】计数class Solution { public int reverseBits(int num) { int bit = 32; int max = 0;原创 2020-06-01 12:47:38 · 294 阅读 · 0 评论 -
leetcode 1018. 可被 5 整除的二进制前缀
【题目】1018. 可被 5 整除的二进制前缀给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5原创 2020-05-14 13:47:14 · 165 阅读 · 0 评论 -
leetcode 1022. 从根到叶的二进制数之和
【题目】1022. 从根到叶的二进制数之和给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。以 10^9 + 7 为模,返回这些数字之和。输入:[1,0,1,0,1,0,1]输出:22解释:(100) + (101) + (110) + (原创 2020-05-14 15:48:06 · 273 阅读 · 0 评论 -
leetcode 693. 交替位二进制数
【题目】693. 交替位二进制数给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。示例 1:输入: 5输出: True解释:5的二进制数是: 101示例 2:输入: 7输出: False解释:7的二进制数是: 111示例 3:输入: 11输出: False解释:11的二进制数是: 1011示例 4:输入: 10...原创 2020-04-25 17:16:52 · 150 阅读 · 0 评论 -
leetcode 476. 数字的补数 & 1009. 十进制整数的反码
【题目】476. 数字的补数 & 1009. 十进制整数的反码给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。示例 1:输入: 5输出: 2解释: 5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。示例 2:输入: 1输出: 0解释: 1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。注意:给...原创 2020-04-14 17:59:31 · 210 阅读 · 0 评论 -
leetcode 405. 数字转换为十六进制数(其他进制也可)
【题目】405. 数字转换为十六进制数给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。给定的数确保在32位有符号整数范围内。不能使用任何由库提供的将数...原创 2020-04-11 18:44:39 · 313 阅读 · 0 评论 -
leetcode 剑指 Offer 65. 不用加减乘除做加法 & 371. 两整数之和 & 面试题 17.01. 不用加号的加法
【题目】371. 两整数之和不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1【解题思路1】位运算低位 = a^b,进位 = a & b。这样的计算可能要持续多次,在十进制的计算中,如果进位一直大于0,就得往后面进...原创 2020-04-09 17:22:47 · 232 阅读 · 0 评论 -
leetcode 面试题 05.01. 插入(待研究)
【题目】【解题思路1】【解题思路2】原创 2020-06-01 12:17:39 · 253 阅读 · 0 评论 -
leetcode 1290. 二进制链表转整数
【题目】1290. 二进制链表转整数给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)示例 2:输入:head = [0]输出:0示例 3:输入:head = [1]输出:1示例 4:输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]原创 2020-05-20 13:56:44 · 228 阅读 · 0 评论