计算一个整数数组中最大差值的元素？
#### 我用php实现的代码，比较暴力，类似于冒泡排序.
```
$arr = [4,2,7,5,11,13,9,1];
$a = 0;
$b = 0;
for ($i = count($arr) - 1; $i >= 0; $i--) {
    for ($j = 0; $j <= $i - 1; $j++) {
        $tmp = $arr[$i] - $arr[$j];

        if ($tmp > $a) {
            $a = $tmp;
            $b = $arr[$i];
        }
    }
}

echo $b;
```
求一个更优的算法，语言不限。
@Reming 的算法有一个小漏洞, 如果数据是这样的话, 算出来的实际上是有问题的.
```
[4, 2, 7, 5, 11, 13, 9, 0, 12]
```
个人认为, 这个问题有两个关注点:
- 最小值
- 最大差值

但和最大值无关, 我们需要关注的是最大差值, 可能最大值出现的时候, 最小值还没有出现, 而后面出现的数值减去最小值可能反而比较大. 上面的用例就是基于这种逻辑设计出来的.
修改后逻辑为: 向后循环遍历, 记录下到目前为止的最小值 以及 最大差值, 然后计算当前元素-目前为止最小值, 判断大小. 记录最大的差值即可.
基于 @Reming 的代码稍微修改了下:
```
var arr = [4, 2, 7, 5, 11, 13, 9, 0, 12];
var min = arr[0], maxDValue = 0;

arr.forEach((el, index) => {
  if (min > el) min = el;

  var diff = el - min;
  if (diff > maxDValue) {
    maxDValue = diff;
  };
});

console.log(maxDValue);
```
再补充一句, 实际上这个问题可以这样想:
- 假设有一个数组[a1, a2, a3, ..., an]
- 
那么我们可以分两步计算出来最大差值

计算a1与左边元素的最大差值, a2与左边元素最大的差值, a3与左边元素的最大差值....an与左边元素的最大差值.
计算所有最大差值里的最大值.


- 其中第一步实际上就是就算am(m=1, 2, 3...)与其左边最小值的差值, 所以我们只需要记录当前最小值以及最大的差值即可.

那么我们可以分两步计算出来最大差值
- 计算a1与左边元素的最大差值, a2与左边元素最大的差值, a3与左边元素的最大差值....an与左边元素的最大差值.
- 计算所有最大差值里的最大值.