算法常见报错问题

ACCEPT

  • 意思:正确

WRONG

  • 意思:答案错误

  • 错误原因:输出答案不符合题目要求,不是正确答案

  • 查错:

    • 如果根本算法错误,那肯定是错误
    • 如果确定算法没问题,那应该是你的输出不符合题目要求输出格式

Runtime Error

  • 意思:运行时出错

  • 错误原因:在运行过程中,出现了内存访问错误,如数组越界访问、指针指向访问越界等

  • 查错:

    • 数组访问错误

      • 看是不是有对数组 arr[-1]的访问,或者arr[ARRMAX+1]的访问(ARRMAX是数组arr的大小)
      • 下标错误,如使用char类型作为下标,超出范围,出现负数
    • 指针使用NULL错误

      • 查看是不是有pNULL时使用了p->nextp->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

  • 意思:输出大小限制超时
  • 错误原因:也是超时限制,一般是某地方输出陷入了死循环,或者输出没有明确的终止。
  • 查错:
    • 应该是没写好输入的停止条件,导致一直在等下一次输入