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