由于在在比赛过程中提交答案总是因为这种问题浪费了很多时间,在网上查找和总结后记录了下面的解决方法。
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树,红黑树等),便于大量的插入,删除和查找。