swift算法:只出现一次的数字

1、描述

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

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

          输出:1

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

          输出:4

 

2、算法

1)利用数组

思想:利用数组,遍历nums中的每一个元素,如果是新出现则加入数组,如果已经在列表则删除

时间复杂度:O(n^2)

func singleNumber(_ nums: [Int]) -> Int {
        /*
         利用数组
         */
        var temp = [Int]()
        for value in nums {
            if temp.contains(value){
                //如果数组已经包含该数字,则从temp中删除该数字
                temp = temp.filter{$0 != value }
            }else{
                temp.append(value)
            }
        }
        return temp.first!
    }

2)哈希表

思想:利用字典记录每个数字出现的次数,最后遍历数组找出只出现一次的数返回         

时间复杂度:O(n)

func singleNumber(_ nums: [Int]) -> Int {
        /*
         哈希表操作
         */
        var temp = [Int:Int]()
        for num in nums {
            if (temp[num] == nil){
                temp[num] = 1
            }else{
                temp.updateValue(temp[num]!+1, forKey: num)
            }
        }
        for (key, value) in temp {
            if value == 1{
                return key
            }else{
                continue
            }
        }
        return 0
    }

3)位运算–异或

思想:由于 0^a = a,a^a = 0 而数组中除了一个数字是只出现一次的,其他数字均出现两次,所以可以用异或来解决问题

时间复杂度: O(n)

func singleNumber(_ nums: [Int]) -> Int {
        /*
         异或
         */
        var temp = nums[0]
        if nums.count > 1{
            for i in 1..<nums.count {
                temp = temp ^ nums[i]
            }
        }
        
        return temp
    }

 

点赞