
位运算
位运算题
花飞雨追
梦想不是浮躁,而是沉淀和积累。
展开
-
Leetcode 1342 将数字变成0的操作次数
题目 给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。 解题思路 直接模拟可以写,但科班人不能满足于此,位运算解决之。末尾为 1 的时候是奇数,需要对原数 -1 ,操作数 +1 ,又因为 /2 是必须的操作,所以答案就是二进制位数加上二进制中 1 的个数再 -1 (首位不算)。 代码 class Solution { public int numberOfSteps(int num) { int ans原创 2022-01-31 00:36:15 · 696 阅读 · 0 评论 -
Leetcode 318 最大单词长度乘积
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。原创 2021-11-17 19:50:20 · 116 阅读 · 0 评论 -
Leetcode 268 丢失的数字
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。原创 2021-11-06 10:54:04 · 159 阅读 · 0 评论 -
Leetcode 面试题 16.09 最大数值
Leetcode 面试题 16.09 最大数值 题目 编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 解题思路 a>b → a-b>0 → 符号位为0 a<b → a-b<0 → 符号位为1 有了这个推论,我们只需要把a-b的值的符号拿出来就行了,这里想到了位运算。然后用与运算可以判断符号位是0还是1 。最后可以用乘法得到结果。 int与int的计算会炸int(脑补最大-最小),强制转换一下即可(痛失1A 代码 class Solution原创 2021-09-27 15:59:19 · 195 阅读 · 0 评论 -
Leetcode 476 数字的补数
Leetcode 476 数字的补数 题目 给你一个 正 整数 num ,输出它的补数。补数是对该数的二进制表示取反。 解题思路 由于没有前导零,就是二进制取反操作,那么只需要知道它有多少位,用全是1的数求异或就行了。 代码 class Solution { public int findComplement(int num) { int ans = num, target = 0; while (num != 0) { num >原创 2021-10-18 10:55:08 · 78 阅读 · 0 评论 -
Leetcode 231 2的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。原创 2021-10-21 10:55:06 · 154 阅读 · 0 评论