求兩個數中的最大值和最小值

假設兩個數分別爲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

這樣咱們就能夠經過一個簡單的關係表達式求出最大值和最小值了。

相關文章
相關標籤/搜索