título
Dada una matriz de enteros, averiguar si hay dos índices distintos i y j de la matriz
de tal manera que la diferencia absoluta entre nums[i]
y nums[j]
es, como máximo t
y la diferencia absoluta entre i y j es, como máximo k .
Ejemplo 1
De entrada: nums = [1,2,3,1], k = 3, t = 0
de la salida: verdadero
Ejemplo 2
De entrada: nums = [1,0,1,1], k = 1, t = 2
de salida: verdadero
Ejemplo 3
De entrada: nums = [1,5,9,1,5,9], k = 2, t = 3
de salida: verdadero
pensamiento
Dar una solución a la violencia, la complejidad \ (O (N * K) \) , usando una ventana deslizante para resolver. Pero también optimizado para \ (O (NlogN) \)
Código
class Solution:
def containsNearbyAlmostDuplicate(self, nums: List[int], k: int, t: int) -> bool:
if len(nums) < 2 or k < 1 or t < 0:
return False
if t == 0 and len(set(nums)) == len(nums):
return False
for i in range(len(nums) - 1):
# 窗口的长度为k,但不能超过数组nums的长度
for j in range(i + 1, min(len(nums), i + k + 1)):
if abs(nums[i] - nums[j]) <= t:
return True
return False