算法每日一刷

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

2019-06-06  本文已影响0人  entre_los_dos

题目

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

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

示例 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方法一样,我平时都很少用,学习了~~
上一篇下一篇

猜你喜欢

热点阅读