タイトル
整数の配列を指定し、二つの別個のインデックスiおよびjはアレイに存在するかどうかを調べる
ように絶対差の間nums[i]
とはnums[j]
以下であるT
と差分絶対値 iとjとの間が最大であるK。
例1
入力: NUMS = [1,2,3,1]、= 0、K = 3、T
出力:真
例2
入力: NUMS = [1,0,1,1] = 2、K = 1、T
出力:真
例3
入力: NUMS = [1,5,9,1,5,9] = 3、K = 2、T
出力:真
思考
暴力の溶液を得、複雑\(O(N * K)\)解決するためにスライディングウィンドウを使用して、。しかし、またに最適化された\(O(NlogN)\)
コード
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