问题描述
我编写了一种算法来确定输入数组是单调数组(其从左到右的元素完全增加还是完全减少)。
我想知道此算法的空间复杂度是多少。我认为这是O(n),因为计数随着数组大小的增加而增加。基本上,每次当前元素为下一个元素 =时,我都会增加计数。因此,如果循环遍历每个元素,则count和count2的最大值基本上就是输入数组的大小。
如果我错了,可以请人解释并纠正我吗?
def monotonic(array):
count = 0
count2 = 0
for i in range(len(array) - 1):
if array[i] <= array[i + 1]:
count += 1
if array[i] >= array[i + 1]:
count2 += 1
if array == []: return True
if count == len(array) - 1 or count2 == len(array) - 1:
return True
else:
return False
解决方法
时间的复杂度为O(n)。
空间的复杂度为O(1)。唯一用于bq query \
--use_legacy_sql=false \
--parameter='from_date:DATE:2020-09-01' \
--parameter='to_date:DATE:2020-09-15' \
'SELECT
...your query...
WHERE DATE BETWEEN @from_date AND @to_date
...rest of the query...'
和STRING_AGG
的存储。没有其他列表,也没有占用可变数量堆栈空间的递归调用。
在计算大小复杂度时,通常的假设是,如果某种东西适合内存,那么它的大小适合一个恒定的位数,因为计算机机器字的大小是由其体系结构定义的常数。
这是务实的选择,我们在适当时做出不同的假设。声明复杂性的目的是说一些有用的东西。我们都知道,渐进分析在技术上并不适用于有界的机器,但无论如何它是一种有用的工具。