算法基础题型注意点

刚搭建完框架,后续会增添具体实例,亟待施工。。。。。。

一、思维题

1. 对于给出的公式,一般都是要化简。
如果公式里是非常用符号,那么可以根据符号的优先级,类比正常的加减乘除进行化简。
2. 对于某一区间内进行重复动作,应当寻找规律。
灵感参考:字符长度,对过程进行动态模拟
3. 规律题可先打表

二、小细节

  • 先判定再赋值
  • 写完题记得判定数组大小
  • 判定时最好不要将不同类的条件放在一起判定
  • 整型范围内的最大值0x7fffffff
  • 数据量比较大时,记得用scanf读入
  • 也不能无脑开long long ,容易爆内存
  • 读取多组数据时,轻易中断输入可能会导致后续数据错乱(来源:猜帽子游戏)
  • 栈作为形参需要写取地址符
  • vector的push_back值下标从0开始
  • 注意要给变量赋初始值:如果定义的是全局变量或者静态变量,未初始化的话就是0;如果是局部变量,那就是以前残留在堆栈里的随机值(也就是说定义在函数中的数组值,初值不一定为0)
  • 检查除法运算中是否有值会为0:做除法运算或者取余运算时,时刻注意除数是否为0,否则容易浮点溢出。

三、灵感

        写图论题时,可以把图先画出来,看看是什么图结构,然后依据结构想想可以使用什么算法。(比如说有向无环图可以使用拓扑排序计算……)

四、二分

时刻注意是否需要开long long 

五、前缀和

注意下标(比如前缀和数组下标从1开始,而要计算的元素可能是从0开始的,一定要注意区分)

六、区间合并

注意合并时的边界点判定,以及对于合并区间前后需要额外判定

七、排序

对于在同等条件下保持原来顺序的数据,不可以使用快排(sort),否则会将顺序打乱。(os:快排是一种不稳定的排序)

八、线段树和树状数组

注意开scanf

九、dp

贪心贪不出来就考虑动态规划
利用历史记录,来避免重复计算

十、树

动态存储(用map取代数组存值):比如二叉树即便只有20层也已经需要2^20-1个空间存值,不用数组容易越界。
计算层数避免套用公式,与上同理,容易越界。可用位运算精确计算
所有查询分支先检查节点是否存在。
兄弟节点判断:排除相同节点的情况。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值