136. 只出现一次的数字及扩展

136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        return accumulate(nums.cbegin(),nums.cend(),0,bit_xor<int>());
    }
};

 

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        res=0
        for i in nums:
            res^=i 
        return res  

 

137. 只出现一次的数字 II

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,3,2]
输出: 3
示例 2:

输入: [0,1,0,1,0,1,99]
输出: 99

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        if len(nums)==1:return nums[0]
        nums.sort()
        if nums[0]!=nums[1]:return nums[0]
        if nums[-1]!=nums[-2]:return nums[-1]
        for i in range(len(nums)):
            if nums[i]!=nums[i-1] and nums[i]!=nums[i+1]:
                return nums[i]

 

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        return int((sum(set(nums))*3-sum(nums))/2)

260. 只出现一次的数字 III

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 :

输入: [1,2,1,3,2,5]
输出: [3,5]
注意:

结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        # s=int(sum(set(nums))*2-sum(nums))
        # xor=0
        # for i in nums:
        #     xor^=i 
        # res=[]
        # for i in range(s):
        #     if i^(s-i)==xor:
        #         res.append(i)
        #         res.append(s-i)
        #         break
        # return res
        if len(nums)==2:return nums
        nums.sort()
        res=[]
        if nums[0]!=nums[1]:res.append(nums[0])
        if nums[-1]!=nums[-2]:res.append(nums[-1])
        for i in range(1,len(nums)-1):
            if nums[i]!=nums[i-1] and nums[i]!=nums[i+1]:
                res.append(nums[i])
        return res

 

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        dict={}
        for i in nums:
            dict[i]=dict.get(i,0)+1
        return [i for i,j in dict.items() if j==1]
posted @ 2020-09-29 17:57  XXXSANS  阅读(129)  评论(0编辑  收藏  举报