首页 > 编程语言 > 详细

【每日算法】存在重复元素 II

时间:2021-07-08 18:32:09      阅读:36      评论:0      收藏:0      [点我收藏+]

题目描述


这是 LeetCode 上的 219. 存在重复元素 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

分析题目要求

1、找出是否存在,返回true和false即可
2、找出两个不同的索引 i 和 j
3、i和j 满足nums[i]=nums[j]
4、|i-j|<=k

双指针暴力解法

看到数组,要找相同的两个数首先想到的应该是双指针的解法,思路如下

1、定义两个指针left,right
2、left先不动,移动right,使用nums[left]=nums[right]
3、如果|left-right|<=k,那么就找存在,就直接返回
4、如果不满足,则继续移动left、right
5、如果找不到则返回false
总结:两层循环,外层控制left,内层控制right

两层循环,感觉应该不会有多快,时间复杂度有O(n*n)
先代码实现试试

def containsNearbyDuplicate(self, nums, k):
    n=len(nums)
    for left in range(n-1):
        for right in range(left+1,n):
            if nums[left]==nums[right] and abs(left-right)<=k:
                return True
    return False

果不其然,直接超时,AC不了

Hash缓存法

用一个hash用记录每个元素的索引,如果下个值存在hash中,用hash的值与当前索引求差,看是否满足条件

def containsNearbyDuplicate(self, nums, k):
    tmp={}
    for i in range(len(nums)):
        if nums[i] in tmp and i-tmp[nums[i]]<=k:
            return True
        tmp[nums[i]]=i
    return False

技术分享图片

【每日算法】存在重复元素 II

原文:https://www.cnblogs.com/hitechr/p/14986500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!