这种单调算法的空间复杂性吗?

问题描述

我编写了一种算法来确定输入数组是单调数组(其从左到右的元素完全增加还是完全减少)。

我想知道此算法的空间复杂度是多少。我认为这是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的存储。没有其他列表,也没有占用可变数量堆栈空间的递归调用。

,

在计算大小复杂度时,通常的假设是,如果某种东西适合内存,那么它的大小适合一个恒定的位数,因为计算机机器字的大小是由其体系结构定义的常数。

这是务实的选择,我们在适当时做出不同的假设。声明复杂性的目的是说一些有用的东西。我们都知道,渐进分析在技术上并不适用于有界的机器,但无论如何它是一种有用的工具。