求两个数中的最大值和最小值

假设两个数分别为a,b

条件判断形式

  1. 比较直观形式就是条件判断

    var max = (a: number, b: number) => a > b ? a : b;
    var min = (a: number, b: number) => a < b ? a : b;
  2. 把上面类似的逻辑抽取成一个函数

    var get = (p: 1 | -1) => (a: number, b: number) => (a - b) * p > 0 ? a : b;
    var max = get(1);
    var min = get(-1);

非条件判断形式

上面逻辑其实类似,都有条件判断,那么有没有一种去除条件判断的方式呢?

其实可以通过代数关系来看

一个数和它绝对值的关系 a <= |a|

再来看这个关系式 |a - b|

a > b,则为a - b,否则就是 -a + b;此时最大值分别为a和b,若我们把a + b加上|a - b|会得到什么呢?如果a > b,则结果为 2a, 否则为 2b;因此我们把结果除以2便得到最大值。即

max(a, b) = (a + b + |a - b|) / 2

同理可得

min(a, b) = (a + b - |a - b|) / 2

这样我们就可以通过一个简单的关系表达式求出最大值和最小值了。

    原文作者:yuanxiaowa
    原文地址: https://segmentfault.com/a/1190000012586051
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞