zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    linux每日命令(29): chown命令
    linux每日命令(28): charp命令
    linux每日命令(27): chmod命令
    linux每日命令(26):Linux文件属性详解
    linux每日命令(25): linux文件类型与扩展名
    linux每日命令(24): linux目录结构
    linux每日命令(23): find命令之xargs
    linux每日命令(22): find命令参数详解
    2017年12月31日
    Python使用otp实现二步验证
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13751002.html
Copyright © 2011-2022 走看看