[编程题] 最大差值
有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。
给定数组A及它的大小n,请返回最大差值。
测试样例:
[10,5],2
返回:0
class LongestDistance {
public:
int getDis(vector<int> vec, int n) {
// write code here
if ( vec.empty() == true ) return 0 ;
int result = 0 ;
for ( int i = 0; i < vec.size(); ++ i ) {
for ( int j = i + 1; j < vec.size(); ++ j ) {
if ( vec[j] - vec[i] > result ) result = vec[j] - vec[i] ;
}
}
if ( result < 0 ) result = 0 ;
return result ;
}
};
第二种方法,要找到最大差值,把思路往前推,我们应该找到最小数值,于是利用一个变量来存储最小数值
class LongestDistance {
public:
int getDis(vector<int> vec, int n) {
// write code here
if ( vec.empty() == true ) return 0 ;
int min_value = vec[0] ; // 维护一个最小值
int result = 0 ;
for ( int i = 1; i < vec.size(); ++ i ) {
if ( min_value > vec[i] ) min_value = vec[i] ;
if ( result < vec[i] - min_value ) result = vec[i] - min_value ;
}
return result ;
}
};
第二次做:
class LongestDistance {
public:
int getDis(vector<int> vec, int n) {
// write code here
if ( vec.empty() == true ) return 0 ;
int minv = vec[0] ;
int maxv = 0 ;
for ( int i = 1; i < vec.size(); ++ i ) {
if ( vec[i] - minv > maxv ) maxv = vec[i] - minv ;
if ( vec[i] < minv ) minv = vec[i] ;
}
return maxv ;
}
};
第三次做:
class LongestDistance {
public:
int getDis(vector<int> vec, int n) {
// write code here
int max = 0 ;
for ( int i = 0; i < vec.size(); ++ i ) {
int tmp = getmax( vec, i + 1, vec.size() - 1 ) - getmin( vec, 0, i ) ;
if ( tmp > max ) {
max = tmp ;
}
}
if ( max < 0 ) return 0 ;
else return max ;
}
private:
int getmax( vector<int>& vec, int left, int right ) {
int result = 0 ;
for ( int i = left; i <= right; ++ i ) {
if ( result < vec[i] ) result = vec[i] ;
}
return result ;
}
int getmin( vector<int>& vec, int left, int right ) {
int result = 999999;
for ( int i = left; i <= right; ++ i ) {
if ( result > vec[i] ) result = vec[i] ;
}
return result ;
}
};