您的位置:首页 > 其它

leetcode_260. Single Number III 数组中找出两个只出现一次的元素

2016-11-12 21:27 302 查看
题目:

Given an array of numbers 
nums
, in which exactly two elements appear only once and all
the other elements appear exactly twice. Find the two elements that appear only once.

For example:

Given 
nums = [1, 2, 1, 3, 2, 5]
, return 
[3,
5]
.

Note:

The order of the result is not important. So in the above example, 
[5, 3]
 is
also correct.
Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

题意:

给定数组nums,其中只有两个元素出现一次,其他元素都出现两次,写一个函数,找出这两个只出现一次的元素。

要求用线性时间复杂度,同时只使用常数个空间单元。

代码:

class Solution(object):

    def singleNumber(self, nums):

        """

        :type nums: List[int]

        :rtype: List[int]

        """

        

        n = len(nums)

        

        if n <= 2 :

            return nums

        else :

            nums.sort()     #对nums排序

            

            count = 0      #记录出现一次的元素个数

            res = []     #存储出现一次的元素

            i = 0

            while i < n-1 :

                if nums[i] == nums[i+1] :

                    i += 2

                else :

                    res.append(nums[i])

                    count += 1

                    i += 1

                if count == 2 :

                    return res

            

            res.append(nums[n-1])      #如果此时还没有返回,说明另一个只出现一次的元素在数组的最后一个位置

            return res

笔记:

表示时间复杂度不符合要求,但是该方法的运行时间真是挺快的

网上查看了其他大神的算法,大多是用按位异或运算,然后根据异或结果反推出两个只出现一次的元素的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐