题目:
思想:
问:为什么把 if-else 写成 (c - ‘a’) * 2 - 1 就会快很多?
答:CPU 在遇到分支(条件跳转指令)时会预测代码要执行哪个分支,如果预测正确,
CPU 就会继续按照预测的路径执行程序。但如果预测失败,CPU 就需要回滚之前的指令并加载正确的指令,以确保程序执行的正确性。
对于本题的数据,字符 ‘a’ 和 ‘b’ 可以认为是随机出现的,在这种情况下分支预测就会有 50% 的概率失败。
失败导致的回滚和加载操作需要消耗额外的 CPU 周期,如果能用较小的代价去掉分支,对于本题的情况必然可以带来效率上的提升。
注意:这种优化方法往往会降低可读性,最好不要在业务代码中使用。
代码:
1 | class Solution: |