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
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值