Maximum difference between two elements such that larger element appears after the smaller number
2016京东商场校园招聘笔试题
问题描述:
无序数组array, 找到数组中两个数的最大差值, 且大数出现在小数之后,如:arr[i]-arr[j], 且
i<j
比如: array 是 [2, 3, 10, 6, 4, 8, 1],最大差值是8(2-10)
方法1
依次访问数组中的每一个元素:
1) 记录当前访问过的数组中的最小值 min_val;
2) 当前元素值arr[i] - min_val 和 max_diff作比较
若大于 max_diff , 则更新它的值
时间复杂度O(n)
空间复杂度O(1)
#include <iostream>
using namespace std;
int maxDiff(int *arr, int n)
{
int min_val = arr[0];
int max_diff = arr[1]-arr[0];
for(int i=1; i<n; ++i)
{
if(max_diff <(arr[i]-min_val))
max_diff = arr[i] - min_val;
min_val = arr[i]<min_val?arr[i]:min_val;
}
return max_diff;
}
int main()
{
int arr[] = {2, 3, 10, 6, 4,8,1};
cout<<maxDiff(arr, 7)<<endl;
}