别忘了边界

10 分钟

很多程序在"正常情况"下对,却栽在边界(极端情况)上。写完一定专门想想这几类:

  • 规模最小:,只有一个元素甚至没有元素。
  • 取到临界值:数正好等于范围的最大或最小,正好等于某个阈值。
  • 特殊结果:答案为 0、为负、全部相同、都不满足条件。
// 找最大值:从 a[0] 起、循环从 1 开始,n=1 也正确
int mx = a[0];
for (int i = 1; i < n; i++)
    if (a[i] > mx) mx = a[i];

上面若把初值写成 int mx = 0;,遇到全是负数的数组就会错——0 比谁都大,答案被污染,正确做法是用第一个元素当初值。

坑清单:数组只有 1 个数、下标从 0 还是 1、循环用 < 还是 <=、long long 溢出、除数为 0、空字符串。提交前把这些过一遍,能挡掉大半失分。边界数据要自己造,别指望样例覆盖。

小纸条

数组里只有 1 个数时,找最大值的程序还对吗?(想想循环从哪开始)

登录 后可看答案