[LeetCode] 219. 存在重复元素 II

题目链接:https://leetcode-cn.com/problems/contains-duplicate-ii/

题目描述:

给定一个整数数组和一个整数 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

思路:

只要数组里存在,两个相同的数的索引号相差小于等于k,返回 true

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        lookup = {}
        # 没有重复元素, 肯定返回False
        if len(set(nums)) == len(nums): return False
        # 只要有一个重复元素 相差的索引号 <=k 返回True
        for idx, num in enumerate(nums):
            if num in lookup and idx - lookup[num] <= k:
                return True
            lookup[num] = idx
        return False

posted on 2019-08-29 20:42  威行天下  阅读(128)  评论(0编辑  收藏  举报

导航