題目描述
給定一個整數數組和一個整數 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+1 個長度的子數組中存在兩個元素相同,則返回 true,否則返回 false。
解法
以滑動窗口形式來判斷窗口覆蓋范圍內是否存在兩個元素相等。因為要判斷元素是否存在,所以這里使用 set 集合作為窗口覆蓋元素的存儲結構。
若使用數組作為存儲結構,當 k 較大時,可能會存在計算超時情況。
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
if k==0:
return False
s=set()
for i in range(len(nums)):
if nums[i] in s:
return True
if i-k>=0:
s.remove(nums[i-k])
s.add(nums[i])
return False