Algorithm 错误的动态规划算法

Algorithm 错误的动态规划算法,algorithm,dynamic-programming,Algorithm,Dynamic Programming,从代码审查转移过来的。如果这个问题也不适合,请告诉我。我会移除它 我正在以下网站上制作一个算法拼图: 它不能通过所有测试用例。有些测试用例有如此大的数组,以至于调试起来非常困难。我这边的简单案例似乎都很管用。有人能研究一下这个问题并分享一下这个算法的错误吗?基本上,它只是在阵列中循环,找到每一个覆盖最远的站点(如origin)。类似计数器的变量结果记录原点(无线电台) def溶液(k,arr,原点=0): arr=已排序(列表(集合(arr))) 结果=1 cur=0 原点=0 对于范围(1,l

从代码审查转移过来的。如果这个问题也不适合,请告诉我。我会移除它

我正在以下网站上制作一个算法拼图:

它不能通过所有测试用例。有些测试用例有如此大的数组,以至于调试起来非常困难。我这边的简单案例似乎都很管用。有人能研究一下这个问题并分享一下这个算法的错误吗?基本上,它只是在阵列中循环,找到每一个覆盖最远的站点(如
origin
)。类似计数器的变量
结果
记录原点(无线电台)

def溶液(k,arr,原点=0):
arr=已排序(列表(集合(arr)))
结果=1
cur=0
原点=0
对于范围(1,len(arr))中的i:

如果arr[i]-arr[origin]将第一个对象放置在第一个索引上。最优解中的第一个对象也可以稍后放置


解决方案(1[1,2,3,4,5,6])
打印3,当它应该是2时(通过将两个对象放置在2和5上)。将第一个对象放置在1、3和5上。理想情况下,它应该是2,然后是5。

大多数代码都是正确的。唯一的问题是使用范围外循环和范围内循环中的continue

  • For range循环不会在运行时更改i值(它更像ForEach循环)
  • continue不会终止内部循环-您可能需要使用break
以下代码通过了所有测试用例

def solution(k, arr, origin=0):
    arr = sorted(list(set(arr)))
    print arr
    result = 1 
    cur = 0
    origin = 0
    i = 0 

    while (i < len(arr)):
        if arr[i] - arr[origin] <= k:
        i = i + 1
            pass
        else:
            origin = i - 1
            j = 1
            while origin + j < len(arr):
                if arr[origin + j] - arr[origin] <= k:
                    pass
                else:
                    # Start for next station position from this point
                    i = origin + j
                    origin = i
                    # need another radio station
                    result += 1
                    break
                j += 1
    return result
def溶液(k,arr,原点=0):
arr=已排序(列表(集合(arr)))
打印arr
结果=1
cur=0
原点=0
i=0
而(i如果arr[i]-arr[origin],请将问题陈述也张贴在这里。非常感谢!!
def solution(k, arr, origin=0):
    arr = sorted(list(set(arr)))
    print arr
    result = 1 
    cur = 0
    origin = 0
    i = 0 

    while (i < len(arr)):
        if arr[i] - arr[origin] <= k:
        i = i + 1
            pass
        else:
            origin = i - 1
            j = 1
            while origin + j < len(arr):
                if arr[origin + j] - arr[origin] <= k:
                    pass
                else:
                    # Start for next station position from this point
                    i = origin + j
                    origin = i
                    # need another radio station
                    result += 1
                    break
                j += 1
    return result