Python查找重复项:找出是否有重复的数字,并且索引diff在mos处

2024-03-28 18:12:22 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个整数数组和一个整数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 输出:真

例3: 输入:nums=[1,2,3,1,2,3],k=2 输出:假

我一直在看我的代码好10分钟,但仍然不明白出了什么问题。。。我的代码运行,但它返回True(例如1),False(例如2),True(例如3)。(对于示例1,它应该是True,对于示例2,它应该是True,对于示例3,它应该是False)

有人能帮我确定问题在我的代码中的位置吗?一个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 

Tags: 代码infalsetrue示例forlenreturn
1条回答
网友
1楼 · 发布于 2024-03-28 18:12:22

你返回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

相关问题 更多 >