Some Notes

Be hard-working every day.

时间复杂度和空间复杂度

时间复杂度

时间复杂度,就是电脑运行一段程序所需要的时间

另外,电脑每秒可以运行 次。( 代表 ,即 )

时间复杂度记作


普通的时间复杂度(常数时间)记作 ,为一段最简单的程序的时间复杂度。

如以下程序的时间复杂度为

#include <stdio.h>
using namespace std;

int main()
{
    int n;
    
    return 0;
}

没错,什么都没有干,只创建了一个变量。


其他时间复杂度(我所知道的很少,只会 ),有几个循环时间复杂度就为

如以下程序的时间复杂度为

#include <stdio.h>
using namespace std;

int main()
{
    for(int i = 0; i < 10; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            printf("%d", i);
        }
    }
    
    return 0;
}

老师的练习:

数位和

大意:输入一个整数 ,求每一位加起来和为 的自然数最小是多少。

注意

这道题的数据范围很大,(),双重循环直接炸。
双重循环复杂度为:

所以需要额外的技巧
考虑到一个各个数位之和为定值的数要最小,则位数最少。
因此偏向个位的数字均为

提交代码
#include <stdio.h>
using namespace std;

int main()
{
    int x;
    scanf("%d", &x);
    
    int a = x / 9, b = x % 9;
    printf("%d", b);
    for(int i = 0; i < a; i ++)
    {
        printf("9");
    }
    
    return 0;
}

空间复杂度

和时间复杂度差不多,只不过这个是和内存有关的。

不多讲了。就比如:

#include <stdio.h>
using namespace std;

int main()
{
    int a[100];
    
    return 0;
}

这里,我们定义了一个类型为 int 的数组,int 占4字节,产生的空间就为 字节。

这就是空间复杂度