【问题标题】:Find duplicate using insertion sort使用插入排序查找重复项
【发布时间】:2021-01-30 11:43:23
【问题描述】:
def find_duplicate(arr):
    for i in range(1, len(arr)):
        cur = arr[i]
        j = i
        while j > 0 and arr[j - 1] > cur:
            arr[j] = arr[j - 1]
            j -= 1
        arr[j] = cur
        if arr[j-1] == cur:
            arr[j] = cur
            return f"This is the duplicate {cur}, {arr}"
        else:
            arr[j] = cur
    print("no dupes")
    return arr


print(find_duplicate([1,-5,3,4,-10,100,250,-325,100]))

当我在数组末尾添加 100 时,它会被排序,并且重复值显示为 100 并且数组已正确排序,但是当我在末尾添加一个负数说 -5 作为重复项时,它不对 -5 进行排序,但有些人如何理解这个数字是重复的。我做错了什么?

请查看我提到的两个数组作为输入:

arr = [1,-5,3,4,-10,100,250,-325,100] arr = [1,-5,3,4,-10,100,250,-325,-5]

print(find_duplicate([1,-5,3,4,-10,100,250,-325,100]))

print(find_duplicate([1,-5,3,4,-10,100,250,-325,-5]))


# OUTPUT BELOW:


This is the duplicate 100, [-325, -10, -5, 1, 3, 4, 100, 100, 250]
This is the duplicate -5, [-5, 1, 3, 4, -10, 100, 250, -325, -5]

更新:

再次运行时

print(find_duplicate([1,-5,3,4,-10,100,250,-325,-5,10]))

this is the duplicate -5, [-325, -10, -5, -5, 1, 3, 4, 100, 250, 10]

似乎它只是在找到重复项后一直附加数字而不是对它们进行排序

【问题讨论】:

    标签: python arrays algorithm sorting duplicates


    【解决方案1】:

    你的逻辑是对的,除了if中的return语句

    def find_duplicate(arr):
        dup = None  # set this to none to act as flag
        for i in range(1, len(arr)):
            cur = arr[i]
            j = i
            while j > 0 and arr[j - 1] > cur:
                arr[j] = arr[j - 1]
                j -= 1
            arr[j] = cur
            if arr[j-1] == cur:
                arr[j] = cur
                dup = cur
            else:
                arr[j] = cur
        if dup is None:  # check if a duplicate was found
            print("no dupes")
            return arr
        else:
            return f"This is the duplicate {dup}, {arr}"
    
    
    print(find_duplicate([1,-5,3,4,-10,100,250,-325,-5]))
    
    print(find_duplicate([1,-5,3,4,-10,100,250,-325,100]))
    
    print(find_duplicate([1,-5,3,4,-10,100,250,-325,-5,10]))
    
    输出
    This is the duplicate -5, [-325, -10, -5, -5, 1, 3, 4, 100, 250]
    This is the duplicate 100, [-325, -10, -5, 1, 3, 4, 100, 100, 250]
    This is the duplicate -5, [-325, -10, -5, -5, 1, 3, 4, 10, 100, 250]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多