您的位置:首页 > 其它

求一个数组中满足一定条件的两个元素的最大差值

2013-08-14 11:18 471 查看
之前在电面的时候碰到一道题,要求找出一个互异数组中两个元素的最大差值。具体描述如下:

有一个整数数组d[0,...,n-1],并且数组满足不存在相同的元素,要求找出

1) max{d[i] - d[j]} 且 i > j;(对应实际生活中的股票买卖,找出可能的最大收益)

2) max{d[i] - d[j]} 且 i < j;

思路有很多种,用动态规划最简单,时间复杂度都是O(n),线性时间复杂度。

针对1)动规的模型如下:

1)设n>i>2,a(i)是以d[i]价格卖出的最大收益,那么最大收益就是d[i]的值减去d[0~i-1]中最小值,即最大收益

2)那么a(i+1)则是以d[i+1]价格卖出的最大收益,就是d[i+1]的值减去d[0~i]中最小值,而1)中已经求出了d[0~i-1]的最小值,只要把那个值与d[i]的值比较即可。

3)在所有可能的卖出点求出所有最大的收益,即为所求。

int findMaxDiff1(int n, int* d)
{
int i = 0;
int min = d[0];
if(n < 2) return 0;
int maxDiff = d[1] - d[0];
for(i = 2; i < n; i++)
{
if(d[i - 1] < min)
{
min = d[i - 1];
}
if(d[i] - min > maxDiff)
{
maxDiff = d[i] - min;
}
}
return maxDiff;
}
int findMaxDiff2(int n, int* d)
{
int i = 0;
int max = d[0];
int maxDiff = d[0] - d[1];
if(n < 2) return 0;
for(i = 2; i < n; i++)
{
if(d[i - 1] > max)
{
max = d[i - 1];
}
if(max - d[i] > maxDiff)
{
maxDiff = max - d[i];
}
}
return maxDiff;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐