剑指offerJZ40-数组中只出现一次的数字

    技术2022-08-01  64

    解法一:python count内置函数 if array.count(i) == 1: res.append(i) 解法二:hashmap,见总结篇博客 解法三:逻辑运算,利用异或,见总结篇博客。数同自己异或为0.分成两组,各组包含一个孤儿数(利用二进制第一个为1的位是否位1分为两组)

    # -*- coding:utf-8 -*- class Solution: def FindNumsAppearOnce(self, array): if not array: return [] tmp = 0 for i in array:# 对array中的数字进行异或运算 tmp ^= i idx = 0 while (tmp & 1) == 0:# 获取tmp中最低位1的位置 tmp >>= 1 idx += 1 a = b = 0 for i in array: if self.isBit(i, idx): a ^= i else: b ^= i return [a, b] def isBit(self, num, idx):# 判断num的二进制从低到高idx位是不是1 num = num >> idx return num & 1
    Processed: 0.009, SQL: 9