2021-5-10
算法题目
1、260:异或位运算
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
#向方法将两个出现一次的数字分在两个组中
#两个组分别异或就可以得到出现次数为单次的两个数
#关键是如何分组,找到第一个不同的位
res = 0
ans = []
for i in nums:
res = res^i
a = 0
b = 0
for i in range(32):
if (res>>i)&1 == 1:
pos = i
break
for i in nums:
if (i>>pos)&1 == 1:
a = a^i
else:
b = b^i
ans.append(a)
ans.append(b)
return ans
2、448:将数据的下标作为标识
class Solution:
#标记加上遍历
#利用数组的index,其做到了标识标记的作用
def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
res = []
n = len(nums)
for i in nums:
pos = abs(i)-1
if(nums[pos]>0):
nums[pos] = -nums[pos]
for i in range(n):
if nums[i]>0:
res.append(i+1)
return res
超累的一天