出现Runtime Error或Time Limit Exceed怎么办?

由于在在比赛过程中提交答案总是因为这种问题浪费了很多时间,在网上查找和总结后记录了下面的解决方法。

Runtime Error

运行时错误,当程序运行到一半时,突然终止。

原因:

1.数组越界 

 2.指针越界   

3.使用已释放的空间   

4.数组开的太大,超出了栈的范围,造成栈溢出;大数组定义在函数内,导致程序栈区耗尽

5.除数为0

对应解决办法分别如下:

1.适当增大数组容量

2.修改指针所属的位置0

4.将大数组定义在函数体外,也就是全局数组,使用程序堆空间

5.若可能存在除数为零, 需对除数数值进行判断

Time Limit Exceed
原因:

1.没有循环终止条件,函数调用超时。例如:未设置循环输入条件

for(m=0;m>0;m++)

scanf(.......)

2.程序算法不够优化。程序复杂,效率低。

对应解决办法:

1.此时如果遇到错误或者遇到end of file,为EOF

while(scanf()!=EOF)
.....

2.优化时间复杂度方法:

(1)以空间换时间

通过增加额外的存储空间来减少算法运行的时间,可通过哈希表或缓存来存储中间结果。例如:对于递归,可用数组存储已经算过的结果,避免重复计算。

(2)减少循环次数

       a.使用更高效的循环结构。用for循环代替while循环,因为for循环次数是已知的,便于优化。

       b.  根据特殊条件提前结束循环,例如二分法。

       c.聚合。当循环操作可以聚合时,可以将多个操作合并,从而减少循环次数

(3)使用更高效的数据结构

a.使用堆或优先队列,例如求TOPk个元素。

b.使用散列表,散列表是一个快速查找的数据结构,可以在常数时间内查找或插入操作。

c.使用树结构(AVL树,红黑树等),便于大量的插入,删除和查找。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值