美文网首页
874. “栏杆错误”——算法进阶必须跨越的门槛

874. “栏杆错误”——算法进阶必须跨越的门槛

作者: 七镜 | 来源:发表于2023-12-05 21:49 被阅读0次

在所有常见的程序设计错误中,最难以察觉的一类是“栏杆错误”,也常被称为“差一错误”(off-by-one error)。七镜在程序设计中,最头疼的莫过于攻克算法了,一提起来,立马就是一把辛酸泪呀!

先上两个通用原则:

  1. 首先考虑最简单情况下的特例,然后将得到的结果外推,这是原则一。
  2. 仔细计算边界,绝不掉以轻心,这是原则二。

技术背景,这次就不提了,直接上编程技巧:

一言以蔽之:用第一个入界点和第一个出界点来表示一个数值范围。具体而言,(以一个问题为引子:假定整数 x 满足边界条件 x >= 16 且 x<= 37,那么此范围内 x 的可能取值个数有多少?)我们不应说整数满足 x 满足边界条件 x>=16 且 x <= 37,而是说整数 x 满足边界条件 x >= 16 且 x < 38。注意,这里下界是“入界点”,即包括在取值范围之中;而上界是“出界点”,即不包括在取值范围之中。

  1. 取值范围的大小就是上界与下界之差。38 - 16 的值是 22,恰恰是不对称边界 16 和 38 之间所包括的所有元素数目。
  2. 如果取值范围为空,那么上界等于下界。这是第一条的直接推论。
  3. 即使取值范围为空,上界也永远不可能小于下界。

附加:

  1. 将上界和下界转换为等效值。(比如:假定整数 x 满足边界条件 x >= 15.3 且 x <= 36.7,那么此范围内 x 的取值个数有多少?转换为 x >= 16 且 x < 37)
  2. 确定步长。(比如:100 英尺长的围栏每隔 10 英尺需要一根支撑用的栏杆,共需要多少根栏杆呢?这里步长就是10,即将原本 x >= 0 且 x<=100 转换为 110 / 10 - 0 这里之所以是 110 而不是 100 是因为 110 是下界等效值;如果题中给定的是 101 英尺长,那这里就是 120,因为 100 到 101 需要一根栏杆 等效于 100 到 110 需要一根栏杆。然后 110 加上步长 10,就等于 120 了。)

相关文章

  • 跨越栏杆

    每次想到这个词的时候,我就会想到刘翔。可能大家跟我有同样的感受,但是我今天想说的是,跨越栏杆不仅代表的是冠军荣誉。...

  • 跨越人生的栏杆

    事件:考试没考好? 破坏性的问句:‘为什么’没有考好? 想着很多已发生的事情……过去的事情…… 会引起自己的情绪低...

  • 跨越人生的栏杆

    主题内容 父母注意力的方向如何影响孩子? 破坏性问句与建设性问句的威力! 直面...

  • 跨越门槛

    今天我在读《原则》这本书,作者瑞•达利欧在小的时候,不喜欢学习,只是为了妈妈高兴才去学校。 但是,到了大学之后,因...

  • BAT面试算法进阶(8)- 删除排序数组中的重复项

    BAT面试算法进阶(7)- 反转整数BAT面试算法进阶(6)- BAT面试算法进阶(6)-最长回文子串(方法二)...

  • BAT面试算法进阶(7)- 反转整数

    BAT面试算法进阶(6)- BAT面试算法进阶(6)-最长回文子串(方法二)BAT面试算法进阶(5)- BAT面试...

  • 不可跨越的门槛

    七岁的胡涂上小学了。 从前她看着哥哥戴着红领巾做早操的样子,觉得他简直是世界上最帅气的男孩。 胡涂多么希望自己也能...

  • BAT面试算法进阶(6)- 最长回文子串(方法二)

    BAT面试算法进阶(5)- BAT面试算法进阶(5)- 最长回文子串(方法一)BAT面试算法进阶(4)- 无重复字...

  • 跨越人生的五个栏杆

    昨天第一次线上磨课《跨越人生的五个栏杆》,感觉还可以,终于带着自己的不完美出发了。就像《亲子导师21条智...

  • 跨越一英尺栏杆

    股神巴菲特在谈投资时,曾经说:“在投资方面我们之所以做得非常成功,是因为我们全神贯注于寻找我们可以轻松跨越的1英尺...

网友评论

      本文标题:874. “栏杆错误”——算法进阶必须跨越的门槛

      本文链接:https://www.haomeiwen.com/subject/azudgdtx.html