调用函数,函数的形参的改变会连着改变实参。
代码:
def smallestDivisor(nums: list[int], threshold: int) -> int:
def divisor(array, d, t):
for i in range(0, len(array)):
if array[i] % d == 0:
array[i] = array[i] // d
else:
array[i] = array[i] // d + 1
return True if sum(array) <= t else False
l, r = 1, threshold
while l < r:
mid = (r - l >> 1) + l
if divisor(nums, mid, threshold):
r = mid
else:
l = mid + 1
return r
当调用smallestDivisor的内嵌函数divisor时,我们传入的形参array的改变会连带着主函数的nums的元素改变。
今天写算法题的时候算是小小的掉进陷阱了,然后我就就另外创建了一个数组进行储存解决了这个问题。
其实还有一种方法可以不用额外创建数组,就是直接使用列表生成器,我们调用这个函数其实是想要求得array数组中每个元素与除数d相除并向上取整后的数组的和。
那么直接 sum((x - 1) // mid + 1 for x in nums) 可以极大的提升我们算法的速度,因为python自身的列表生成器比我们手写的运行速度要快3倍。

7万+

被折叠的 条评论
为什么被折叠?



