- ~NOT &AND |OR ^XOR << n *2^n,>> n /2^n
- 190. 颠倒二进制位 EASY">190. 颠倒二进制位 EASY
- 191. 位1的个数 EASY">191. 位1的个数 EASY
- Q136. 只出现一次的数字 EASY">Q136. 只出现一次的数字 EASY
- Q137. 只出现一次的数字 II MEDIUM">Q137. 只出现一次的数字 II MEDIUM
- 371. 两整数之和 EASY">371. 两整数之和 EASY
- 389. 找不同 EASY">389. 找不同 EASY
- Q260. 只出现一次的数字 III MEDIUM">Q260. 只出现一次的数字 III MEDIUM
- 405. 数字转换为十六进制数 EASY">405. 数字转换为十六进制数 EASY
- Q421. 数组中两个数的最大异或值 MEDIUM">Q421. 数组中两个数的最大异或值 MEDIUM
- Q187. 重复的DNA序列 MEDIUM">Q187. 重复的DNA序列 MEDIUM
- Q318. 最大单词长度乘积 MEDIUM">Q318. 最大单词长度乘积 MEDIUM
- 1238. 循环码排列 MEDIUM">1238. 循环码排列 MEDIUM
~NOT &AND |OR ^XOR << n *2^n,>> n /2^n
1^0 = 1 0^1 = 1 0^0 = 0 1^1 = 0
任何数和 0 做异或运算,结果仍然是原来的数,即 a ⊕ 0 = a 。
任何数和其自身做异或运算,结果是 0,即 a ⊕ a = 0 。
异或运算满足交换律和结合律,即 a ⊕ b ⊕ a = b ⊕ a ⊕ a = b ⊕ ( a ⊕ a ) = b ⊕ 0 = b 。
自反性 A ⊕ B ⊕ B = A ⊕ 0 = A —-> A ⊕ R B = C 则 C ⊕ B = A
190. 颠倒二进制位 EASY
颠倒给定的 32 位无符号整数的二进制位 示例 1: 输入: 00000010100101000001111010011100 输出: 00111001011110000010100101000000 解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
191. 位1的个数 EASY
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
Q136. 只出现一次的数字 EASY
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 通过次数227,279 | 提交次数329,770
class Solution {public:int singleNumber(vector<int>& nums) {int res = 0;for(auto i:nums){res ^= i;}return res;}};
class Solution:def singleNumber(self, nums: List[int]) -> int:# return reduce(lambda x,y:x^y, nums)res = 0for e in nums:res^=ereturn res
Q137. 只出现一次的数字 II MEDIUM
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,3,2] 输出: 3 示例 2: 输入: [0,1,0,1,0,1,99] 输出: 99 通过次数33,163 | 提交次数49,291
371. 两整数之和 EASY
不使用运算符
+和-,计算两整数a、b之和。
389. 找不同 EASY
给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母
请找出在 t 中被添加的字母。
示例:
输入:
s = “abcd”
t = “abcde”
输出:
e
解释:
‘e’ 是那个被添加的字母。
通过次数31,650提交次数50,729
Q260. 只出现一次的数字 III MEDIUM
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现? 通过次数23,494 | 提交次数32,377
405. 数字转换为十六进制数 EASY
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
Q421. 数组中两个数的最大异或值 MEDIUM
给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, j < n 。 你能在O(n)的时间解决这个问题吗? 示例: 输入: [3, 10, 5, 25, 2, 8] 输出: 28 解释: 最大的结果是 5 ^ 25 = 28. 通过次数4,796 | 提交次数8,18
Q187. 重复的DNA序列 MEDIUM
所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。 示例: 输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT” 输出:[“AAAAACCCCC”, “CCCCCAAAAA”] 通过次数18,301 | 提交次数41,039
Q318. 最大单词长度乘积 MEDIUM
给定一个字符串数组 words,找到 length(word[i]) length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例 1: 输入: [“abcw”,”baz”,”foo”,”bar”,”xtfn”,”abcdef”] 输出: 16 解释: 这两个单词为 “abcw”, “xtfn”。 示例 2:** 输入: [“a”,”ab”,”abc”,”d”,”cd”,”bcd”,”abcd”] 输出: 4 解释: 这两个单词为 “ab”, “cd”。 *示例 3: 输入: [“a”,”aa”,”aaa”,”aaaa”] 输出: 0 解释: 不存在这样的两个单词。 通过次数7,993 | 提交次数12,490
1238. 循环码排列 MEDIUM
给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,,…,2^n-1) 的排列 p,并且满足:
p[0] = start
p[i] 和 p[i+1] 的二进制表示形式只有一位不同
p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同
