算法常见报错问题
算法常见报错问题
ACCEPT
- 意思:正确
WRONG
-
意思:答案错误
-
错误原因:输出答案不符合题目要求,不是正确答案
-
查错:
- 如果根本算法错误,那肯定是错误
- 如果确定算法没问题,那应该是你的输出不符合题目要求输出格式
Runtime Error
-
意思:运行时出错
-
错误原因:在运行过程中,出现了内存访问错误,如数组越界访问、指针指向访问越界等
-
查错:
-
数组访问错误
- 看是不是有对数组
arr[-1]
的访问,或者arr[ARRMAX+1]
的访问(ARRMAX是数组arr的大小) - 下标错误,如使用char类型作为下标,超出范围,出现负数
- 看是不是有对数组
-
指针使用NULL错误
-
查看是不是有
p
是NULL
时使用了p->next
或p->data
之类的访问 -
没有进行指针初始化
-
p->next
跳跃过多
-
-
悲惨经历
知道边界值不能访问,也确实判断了是不是边界值,可是有点问题——利用
&&
的截断机制
1
2
3
4
5
6
7
8 // 思考为什么?
// 错误
if(arr[i] && i>=0)
....;
// 正确
if(i>=0 && arr[i])
...;
Time Limit Exceeded
-
意思:超时
-
错误原因:算法不够优秀,时间复杂度太高,测试时超出了运行时间的限制
-
查错:
- 改良算法,对时间复杂度进行优化
Memory Limit Exceeded
-
意思:内存超限
-
错误原因:算法不够优秀,使用内存过大,超出了内存大小限制
-
查错:
-
改良算法,对空间复杂度进行优化
-
我遇到过的错误情况:
-
使用
cin
输入出错,导致内存错1
2
3
4
5
6
7
8// T[i].lchild是整数类型,但是输入会出现字符‘-’
// 因此,后续cin都是fail,需要自己判断并改回clear正确
cin >> T[i].lchild;
if(cin.fail())
{
cin.clear();
T[i].lchild = -1;
}
-
-
Output Size Limit Exceeded
- 意思:输出大小限制超时
- 错误原因:也是超时限制,一般是某地方输出陷入了死循环,或者输出没有明确的终止。
- 查错:
- 应该是没写好输入的停止条件,导致一直在等下一次输入
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 isSeymour!
评论