最大利益:Maximum Profit
输入示例:
6
5
3
1
3
4
3
输出示例:3
(1)O(n*n)算法遍历
for j 从1到n-1
for i 从1到n-1
maxv=max(maxv,R[j]-R[i])
(2)O(n)算法:初始化最小元素min为首元素,最大利益maxv。遍历数组,计算当前元素与min的差值,若大于maxv更新maxv。比较当前元素与min的大小,若当前元素小于min,更新min为当前元素(说明先前以min为最小元素为基准的最大利益比较完毕,现在更换比较的基准)
#include<iostream>
#define MAX 20000
using namespace std;
int Max(int i,int j){return i>j?i:j;}
int Min(int i,int j){return i<j?i:j;}
int main()
{ int R[MAX],n;
cin>>n;
for(int i=0;i<n;i++)
{cin>>R[i];}
int maxv=-200000;
int minv=R[0];
for(int i=1;i<n;i++)
{
maxv=Max(maxv,R[i]-minv);
minv=Min(minv,R[i]);
}
cout<<maxv<<endl;
system("PAUSE");
return 1;
}