位运算
May 5, 2024About 1 min
相关链接
两个数字异或的结果 a 是将 a 和 b 的二进制每一位进行运算,得出的数字。 运算的逻辑是果同一位的数字相同则为 0,不同则为 1
异或的规律
- 任何数和本身异或则为
0 - 任何数和 0 异或是
本身 - 异或运算满足交换律,
136. 只出现一次的数字 - 力扣(LeetCode) easy
这道题的第一想法是 hashmap,用这个很快就能做出来也满足题目要求, 但是看解答才发现了位运算这个概念,于是开学
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# dir = {}
# for i in range(len(nums)):
# if nums[i] in dir:
# del dir[nums[i]]
# else:
# dir[nums[i]] = 1
# for key, value in dir.items():
# k = key
single_num = 0
for i in range(len(nums)):
print(single_num)
single_num = single_num ^ nums[i]
return single_num2024-05-05
感觉没必要学习位运算...
20250213 还是好好学习位运算。
2917.Find the K-or of an Array - LeetCode easy
主要考察的是位运算里的(num >> i) & 1的含义
class Solution:
def findKOr(self, nums: List[int], k: int) -> int:
result = 0
for i in range(31): # 处理0到30位
count = 0
for num in nums:
if (num >> i) & 1:
count += 1
if count >= k:
result += (1 << i)
return result