LeetCode 219. 存在重复元素 II Contains

作者: 1江春水 | 来源:发表于2019-08-12 11:55 被阅读21次

    【题目描述】
    给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。

    【示例1】

    输入: nums = [1,2,3,1], k = 3
    输出: true
    

    【示例2】

    输入: nums = [1,0,1,1], k = 1
    输出: true
    

    【示例3】

    输入: nums = [1,2,3,1,2,3], k = 2
    输出: false
    

    【思路1】
    1、暴力解
    2、分别判断两个值是否相等且 index绝对值 <= k
    3、时间复杂度O(n^2)
    4、代码略

    【思路2】
    1、使用哈希表 [value:index]
    2、把数值当做key,index当做value
    3、遍历数组,当map[n]有值时,判断abs(map[n]-cur) <= k
    4、时间复杂度O(n)
    5、空间复杂度O(n)

    Swift代码实现:

    func containsNearbyDuplicate(_ nums: [Int], _ k: Int) -> Bool {
        var map = [Int:Int]()
        for (i,n) in nums.enumerated() {
            if let tmp = map[n] {
                if abs(tmp-i) <= k {
                    return true
                }
            }
            map[n] = i
        }
        return false
    }
    

    后续会继续更新文章,也可以关注我的公众号:


    个人公号.jpg

    相关文章

      网友评论

        本文标题:LeetCode 219. 存在重复元素 II Contains

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