Leetcode 220重複要素III(重複IIIを含有します)

タイトル

整数の配列を指定し、二つの別個のインデックス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

おすすめ

転載: www.cnblogs.com/yufeng97/p/12602295.html