可以用数学表达式代替(while)循环

问题描述 投票:0回答:1

在 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]
python math
1个回答
0
投票

问题是“>=”。 这会让你的代码相差一号。 另外,你还交换了加法和减法。 我们需要将 -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。

© www.soinside.com 2019 - 2024. All rights reserved.