leetcode-219存在重复元素

题目描述

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。

示例 1:

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

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

此题思路,可以通过两次循环找出答案,时间复杂度为O(n^2)

更为高效的思路则为如果索引差值最大不超过k,则可以寻找一片空间,空间最大可以包含k+1个元素(例如:k=2,则空间最多可以包含0,1,2三个索引对应的值)我们寻找在这个空间里是否有k+1的下一个元素,如果有,直接返回,如果没有,我们让k+1这个指针往右移动1,最前面的那个元素可以直接删除

以下为python代码

class Solution(object):
    def containsNearbyDuplicate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        """
        order_set = set()
        
        for i in range(len(nums)):
            if nums[i] in order_set:
                return True
            order_set.add(nums[i])
            # 保持record中最多有k个元素
            if len(order_set) == k + 1:
                order_set.remove(nums[i-k]) 

        return False
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容