算法题目的时间复杂度和空间复杂度

一、如何判断时间复杂度?

  利用--大O记法:

  1、只保留最高次项;

  2、最高次项的系数默认是1;

  3、常数次一律记为O(1)。

例题1:

void test1()
{
    int n, m;
    cin >> n >> m ;
    int sum = 0;
    for(int i = 0; i < n; i ++)
    {    
        for(int i = 0; i < m; i ++)
        {
            sum ++;
        } 
    }
}

  这时候其实只看两个for循环,其他的不管,并且知道内层for循环循环了m次,外层for循环循环了n次,可以知道它的时间复杂度大约是 O(n*m)。

 

例题2:

void test2()
{
    for (int i = 0; i < 10000; i ++) 
    {
        cout << "aa" << endl;
    }
}

  根据前面的大O记法,常数次默认是O(1)。

 

例题3:

void test3()
{
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < n; i ++)
    {
        cout << 1 << endl ;
    }
    for(int i = o; i < m; i ++)
    {
        cout << 2 << endl ;
    }
}

  这里不是嵌套关系,所以是O(n+m)。

 

例题4:

void test4()
{
    int n;
    cin >> n;
    int cnt = 0;
    int l = 1;
    while(l < n)
    {
        cnt ++;
        l *= 2;
    }
    cout << cnt << endl;
}

   因为这里 L 是乘了2,会比预期更快达到 L > n,按照数学表达式-> 2^L = n  --> L = logn,所以时间复杂度为O(logn)。

 

二、空间限制(题目内存要求不能超过多少mb)

   数组基本上最大能开到10的7次方大小。

posted @ 2024-02-28 23:42  烟儿公主  阅读(39)  评论(0编辑  收藏  举报