LeetCode 219. 存在重复元素 II Contains Duplicate

【题目描述】
给定一个整数数组和一个整数 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
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容