在 python 中,似乎可以不使用循环来执行此操作:
check = -arr[i]
while check >= mi:
check -= k
arr[i]
和 mi
此时为常数。check
的值,使其遵循以下规则:
check = (x * k) - arr[i]
对于一些x
并且:
check >= mi
这里的一切都是整数。
显然在这里使用循环效率非常低,所以我想知道如何在 O(1) 时间内完成它。 while 循环代码在所有情况下都是正确的,只是速度慢。
我尝试过这个,但这是错误的。
x = math.ceil((mi + arr[i]) / k)
check = x * k - arr[i]
问题是“>=”。 这会让你的代码相差一号。 另外,你还交换了加法和减法。 我们需要将 -arr[i] 减少 x*k 值。
x = math.ceil((-arr[i]-mi+1)/k)
check = -arr[i] - x * k
考虑一个示例,其中 arr[i] = -14、mi = 5、k = 3。如果我们手动执行此操作,则需要 14、11、8、5、2。因此,需要 4 个步骤。 如果 arr[i] = -13,则只有 3 个步骤:13、10、7、4。