Python: поиск дубликатов: узнайте, есть ли повторяющиеся числа, и индекс diff не больше k - PullRequest
1 голос
/ 13 октября 2019

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

Пример 1: Ввод: nums = [1,2,3,1], k = 3 Выход: истина

Пример 2: Ввод: nums = [1,0,1,1], k = 1 Выход: true

Пример 3: Вход: nums = [1,2,3,1,2,3], k = 2 Выход: false

У меня естьискал мой код в течение хороших 10 минут и до сих пор не понимаю, что пошло не так ... Мой код работает, но возвращает True для примера 1, False для примера 2, True для примера 3. (Это должно быть True для примера1, True для примера 2 и False для примера 3.

Может кто-нибудь помочь мне определить, где проблема в моем коде? Новичок Python здесь, заранее спасибо за вашу помощь!

def findDistinct(nums,k):   
    nums = sorted(nums)  # sort first 
    for i in range(len(nums)):
        for j in range(i+1,len(nums)):  
            if nums[i] == nums[j] and abs(j-i)<=k:
                return True
            else:
                return False 

1 Ответ

1 голос
/ 13 октября 2019

Вы возвращаете False слишком рано. * Если вы не нашли дубликат для первого тестируемого индекса, то не означает, что вы не найдете дубликат для более позднего индекса:

def findDistinct(nums, k):   
    # sorting makes no sense, you lose the information about the initial indexes
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):  
            if nums[i] == nums[j] and abs(j-i)<=k:
                return True
    return False  # now you have checked all indexes

Вы можете сократить его до:

def findDistinct(nums, k):   
    for i, el in enumerate(nums):
        if el in nums[i+1:i+k+1]:
            return True
    return False  # now you have checked all indexes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...