彻底搞清楚数据范围和笔试题中时间复杂度和空间复杂度分析

本文深入解析了C++中各种数据类型的存储范围,包括整型、浮点型及长整型,同时讨论了时间与空间复杂度的概念,以及它们在实际编程中的应用。文章还提供了关于内存使用和优化的实用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型数据范围数量级
unsigned int0~42 9496 729542亿 10位
int-21 4748 3648~21 4748 3647 2 ∗ 1 0 9 2*10^9 2109
unsigned long0~42 9496 729542亿 10位
long (32位系统)-21 4748 3648~21 4748 364721亿
long long的最小值-922 3372 0368 5477 580819位
long long的最大值922 3372 0368 5477 5807 9 ∗ 1 0 18 9*10^{18} 91018
unsigned long long0~1844 6744 0737 0955 161520位
float(浮点型)3.402823E-38~3.402823E+3838位
double(浮点型)1.79769313486232E-308 ~1.79769313486232E+308308位

计算机存储浮点数的方式:1, 2

long long内的最大阶乘 20 ! 20! 20!
int内的最大阶乘 12 ! 12! 12!

long和int的大小跟系统位数有关

  • 16位系统:long是4字节,int是2字节
  • 32位系统:long是4字节,int是4字节
  • 64位系统:long是8字节,int是4字节

时间复杂度 > 空间复杂度

  • 申请25万大小的vector型数组大约需要1MB内存

  • 具有4GB内存的电脑可以开 1 0 9 10^9 109的int型数组

  • C++ 1秒内一般能算 1 0 7 10^7 107 1 0 8 10^8 108(比较紧)
    时间复杂度一般是 1 0 7 10^7 107比较稳,有的时候能到 1 0 8 10^8 108次,但时间就会比较紧,题目如果放宽到2ms,可能可以将将好能AC [1] 11:44 [2]

  • 一般情况下时间复杂度比空间复杂度更加重要

memset常用赋值

头文件 <cstring>
memset(f, 0, sizeof(f));

  • 0
  • -1
  • 0x3f(正无穷 1,061,109,567)
  • -0x3f(负无穷 -1,044,266,559)但不等于 -0x3f3f3f3f(坑点)

其他小常识

int:    - 2 31 2^{31} 231 ~ 2 31 2^{31} 231- 1     2 ∗ 1 0 9 2*10^9 2109
long long: - 2 63 2^{63} 263 ~ 2 63 2^{63} 263- 1     9 ∗ 1 0 18 9 * 10 ^ {18} 91018

l o g 1 0 n ≈ 4 n log 10^n\approx4n log10n4n
l o g 1 0 6 ≈ 24 log 10^6\approx24 log10624

∇ \nabla 互联网笔试题通常的限制

  • 时间限制1秒:说明时间复杂度一个在 1 0 7 10^7 107左右
  • 空间限制32768K = 32 MB:说明可以申请800万左右的vector型数组
    注意:上面说的是vector型数组,如果是普通数组int array[N],基本上可以开到很大很大,因为vector是动态开数组,STL容器一般都是比较花时间的,所以能用数组模拟尽量用数组

用牛客网进行测试,结果如下:


2021/5/1更新:空间复杂度分析详见:传送门,设计操作系统优化等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捡起一束光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值