空间复杂度优化算法
void sovle_maxSub_Dp_OptimalSpace(int *a, int n){
int S=0;
int max_value=INT_MIN;
int max_index=0;
for(int i=n-2;i>=1;i--){
S=S<0?a[i]-a[i+1]:a[i]-a[i+1]+S;
if(max_value<S){
max_value=S;
max_index=i;
}
}
cout<<"最大差值为:"<<max_value<<",对应的两个元素为:"<<endl;
cout<<"数组中第"<<max_index<<"个元素:"<<a[max_index]<<endl;
for(int i=max_index+1;i<=n;i++){
if(a[max_index]-a[i]==max_value){
cout<<"数组中第"<<i<<"个元素:"<<a[i]<<endl;
break;
}
}
}
当时头大,只写了穷举法 O(N2)的复杂度,肯定还有简单的方法呀,只是当时不知怎地就是想不起来紧张的要死告诉面试官暂时另一个办法想不起来了
回来一看又是编程之美里的题目,其实我在暑假的时候已经看过了那个题目可惜可惜。现在在这里写出来给自己一个经验教训!
动态规划算法O(N)
给定一个整数数组,a[1],a[2],...,a[n],每一个元素a[i]可以和它右边的(a[i+1],a[i+2],...,a[n])元素做差,求这个数组中最大的差值,例如a={0,3,9,1,3,5}这个数组最大的差值就是9-1=8;(此为小减大,面试给的是大减小)