美文网首页算法每日一刷
136. 只出现一次的数字(Swift)

136. 只出现一次的数字(Swift)

作者: entre_los_dos | 来源:发表于2019-06-06 14:03 被阅读0次

    题目

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

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

    示例 1:

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

    示例 2:

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

    找出只出现一次的数,并且不使用额外空间来实现。其余数均出现两次

    方法1-字典变量来存放

    func singleNumber(_ nums: [Int]) -> Int {
            
            //创建一个字典,没有就添加,有了就删除
            var noRepeatDic = [Int:Int]()
            for num in nums {
                if (noRepeatDic.keys.contains(num)) {
                    noRepeatDic.removeValue(forKey: num)
                }else {
                    noRepeatDic[num] = num
                }
            }
            return Array(noRepeatDic.keys)[0]
            
        }
    

    方法2-位运算符

    func singleNumber(_ nums: [Int]) -> Int {
            
            //位运算符。位异或 ( ^ )相同为0,不同为1
            var result = 0
            
            for num in nums {
                result = result ^ num //或者 result ^= num
            }
            return result
        }
    

    最后

    1. 我第一反应想的是排序,然后相邻值比对~ 但是这个好像不符合题意~
    2. 方法1也可用数组来存放~也是一方法,但是contains方法没字典找得快
    3. 位运算符,原来是这么用的。跟昨天的set方法一样,我平时都很少用,学习了~~

    相关文章

      网友评论

        本文标题:136. 只出现一次的数字(Swift)

        本文链接:https://www.haomeiwen.com/subject/ukgyxctx.html