217. 存在重复元素(Swift)

题目

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:

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

示例 2:

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

示例 3:

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

判断数组(只有整数)里面是否存在重复数值,存在返回true,不存在返回false

方法1-遍历过的数值放数组里面来判断

func containsDuplicate(_ nums: [Int]) -> Bool {
        
        //创建一个数组,用来放遍历过的数
        var newArr:[Int] = NSMutableArray() as! [Int]
        var isDuplicate = false
        
        for num in nums {
            //如果数组里面有,则代表有重复,返回结果
            if newArr.contains(num) {
                isDuplicate = true
                break
            }else {
                //没有的话,添加
                newArr.append(num)
            }
        }
        return isDuplicate
    }

时间超限。。

方法2-遍历过的数值放字典里面来判断

 func containsDuplicate(_ nums: [Int]) -> Bool {
        
        //创建一个字典,用来放遍历过的数
        var numDic = [Int:Int]()
        
        for num in nums {
            //如果数组里面有,则代表有重复,返回结果
            if numDic.keys.contains(num) {
                return true
            }else {
                //没有的话,添加
                numDic[num] = 0
            }
        }
        return false
    }

结果如下,很慢。。但是比数组快点儿,没超时


image.png

方法3-先排序再比较相邻值

func containsDuplicate(_ nums: [Int]) -> Bool {
        
        if nums.count < 2 {
            return false
        }
        //先排序
        let newNums = nums.sorted()
        //然后相邻值比对
        var num1 = newNums[0]
        for i in 1..<newNums.count {
            let currentNum = newNums[i]
            if currentNum == num1 {
                return true
            }
            num1 = currentNum
        }
        
        return false
    }

结果,比方法2要快很多~~


image.png

方法4-利用set去重

func containsDuplicate(_ nums: [Int]) -> Bool {
        
       return nums.count > Set(nums).count
    }

结果
236s,332s。效率也还可以~而且代码比较简洁

最后

  1. contains方法要慎用,数据量大的时候,查找也挺慢的
  2. 数组contains比字典contains查得要慢。
  3. set(数组),结果是数组去重后的,不过无序
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 4,914评论 0 4
  • 1 .数组 Arrays 数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。这和O...
    iceMaple阅读 3,418评论 0 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,934评论 0 17
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,826评论 0 1
  • 1.充分调动演讲6情绪。 悲伤,喜爱,快乐,憎恨,厌恶,恐惧 2.激发观众的想象 眼,耳,鼻,口,手 3.善用脆弱...
    炼药师天天阅读 4,227评论 0 0

友情链接更多精彩内容