在博客中看到如下题:(http://www.cnblogs.com/bigwangdi/p/3139145.html)
如果知道股票每天的股价以后,对该股票进行投资,问什么时候买入和卖出(注意这里有先后顺序)能取得最大的收益。其数学模型就是,给定一个整数数组,a[1],a[2],...,a[n],每一个元素a[i]可以和它左边(a[i-1],a[i-2],...,a[0])元素做差,求这个数组中最大的差值。

1.时间复杂度O(n2)
res=0;//最小差值
for(int i=1;i<=length-1;i++)
{
  for(int j=0;j<i;j++)
    {
      if(arr[i]-arr[j]>res)
      res=arr[i]-arr[j];
    }
}
return res;

2.时间复杂度O(n)
min=arr[0];//此数之前的最小值
res=0;//此数之前的最小差值
for(int i=1;i<=length-1;i++)
{
    if(arr[i]-min>res)
        res=arr[i]-min;
    if(arr[i]<min)
        min=arr[i];
}
return res;

另:类似算法
int diff = 0;
int res = 0;
for(int i = 1; i < len; i++) { diff = diff >= 0 ? diff + arr[i] - arr[i-1] : arr[i] - arr[i-1];//实质也是当前值与它之前的最小值相减 if(diff > res) { res = diff; } }
return res;