题目描述:
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
示例 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
本题思路:
查重一般考虑哈希表。而在python中,字典和集合的底层实现就是哈希表,值可以重复但是键不能重复,所以一般用查询值作为键值。
那首先回顾哈希表~
- 哈希表的思想是通过散列函数将关键值(key)映射到唯一的地址单元来访问记录,因此哈希表可以实现快速查找,通过关键字找到对应存储地址。
- 在哈希表中核心问题就是散列函数的构造和散列冲突的解决。
顺便复习enumerate函数
- enumerate()函数将可遍历的数据对象如列表、元组等组合成一个索引序列,因此可以返回得到数组值和对应下标
整体逻辑:
- 首先enumerate()函数遍历整数数组nums;
- 对于数组中的值首先判断是否在原数组中,如果存在,则判断是否下标值(index)和通过哈希表查到的下标值的差是否小于k,若满足上述两个条件返回True;否则更新哈希表的下标信息;
- 若遍历结束,则说明数组中不存在满足条件的重复元素。
代码实现:
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
hash1 = {}
for index,num in enumerate(nums):
if num in hash1 and index-hash1[num]<=k: #判断num是否存在
return True
else:
hash1[num]=index #更新位置
return False
第一次写博客,记录一下!