Содержит дубликат II - PullRequest
       1

Содержит дубликат II

0 голосов
/ 25 октября 2018

Учитывая массив целых чисел и целое число k, выясните, есть ли в массиве два разных индекса i и j, так что nums [i] = nums [j] и абсолютная разница между i и j не превышает k.

Пример 1:

Input: nums = [1,2,3,1], k = 3
Output: true

Пример 2:

Input: nums = [1,0,1,1], k = 1
Output: true

Пример 3:

Input: nums = [1,2,3,1,2,3], k = 2
Output: false

Вот мой код:

class Solution(object):
def containsNearbyDuplicate(self, nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: bool
    """
    def helper(lnums, n):
        if len(lnums) == 0 and n == 0:
            return False
        elif len(lnums) > n:
            for i in lnums[1:n]:
                if i == lnums[0]:
                    return True
            lnums.pop(0)
            return helper(lnums, n)
        else:
            return False

    return helper(nums, k)

Кто-нибудь может указать, почему я делаю это неправильно ???Я знаю, что что-то не так в элифе.Но я понятия не имею, почему это не работает.

1 Ответ

0 голосов
/ 25 октября 2018

Несколько небольших настроек, чтобы заставить его работать:

def helper(lnums, n):
    if len(lnums) == 0 or n == 0:  # note: or, not and
        return False
    else:   # there do NOT have to be at least n elements, why would there?
        for i in lnums[1:n+1]:  # exclusive upper slice boundary -> n+1
            if i == lnums[0]:
                return True
        lnums.pop(0)
        return helper(lnums, n)

Или без дорогих всплывающих окон и рекурсии, используя некоторые полезные утилиты, такие как any и enumerate:

def helper(lnums, n):
    return any(x in lnums[i+1:i+1+n] for i, x in enumerate(lnums))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...