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

假设两个数分别为a,b函数

条件判断形式

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

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

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

非条件判断形式

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

其实能够经过代数关系来看co

一个数和它绝对值的关系 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

这样咱们就能够经过一个简单的关系表达式求出最大值和最小值了。

相关文章
相关标签/搜索