一个整数数组a[n],在a[n]中找两个数字,使得下标大的数字减去下表小的数字所得的差值最大,即:
在a[n]中找 a[i] 和 a[j] ,使得 a[i] - a[j] 的值最大,并且 i > j 。
寻求O(n)的解法
1 #include<iostream>//max{d[i] - d[j]} 且 i > j 2 #include<vector> 3 using namespace std; 4 int Find_max1(vector<int> &a) 5 { 6 int len=nums.size(); 7 if(len==0||len==1) return false; 8 int minleft=a[0]; 9 int maxdiff=a[1]-a[0]; 10 for(int i=2;i<len;i++){ 11 if(a[i-1]<minleft) minleft=a[i-1]; 12 if(a[i]-minleft>maxdiff) maxdiff=a[i]-minleft;
return maxdiff; 13 } 14
如果要求i<j的话:
#include <iostream>//max{d[i] - d[j]} 且 i<j #include <vector> using namespace std; int Find_max2(vector<int> &a) { int len=nums.size(); if(len==0||len==1) return false; int maxleft=a[0]; int maxdiff=a[0]-a[1]; for(int i=2;i<len;i++){ if(a[i-1]>maxleft) maxleft=a[i-1]; if(maxleft-a[i]>maxdiff) maxdiff=maxleft-a[i]; return maxdiff; }