单调递增子序列

来源:互联网 发布:淘宝客户信誉度怎么看 编辑:程序博客网 时间:2024/05/17 09:01

按照编程之美的思路书写。理解起来还挺费劲了。


#include <iostream>#include <vector>#include <cstdlib>using namespace std;int main(){int height[20] = {1,4,5,2,3,7,4,6,5,2,8,3,7};int l = 13;int MaxV[20];int MaxL = 1;MaxV[0] = -65535;MaxV[1] = height[0];for(int i=1; i<l; ++i){cout<<height[i]<<endl;if(height[i] > MaxV[MaxL]){MaxL++;MaxV[MaxL] = height[i];}else{/*int j;for(j=MaxL; j>=1; j--){if(MaxV[j]>height[i] && MaxV[j-1]<height[i]){MaxV[j] = height[i];break;}}*/int low = 0, high = MaxL;int mid;while(low < high){mid = (low+high)/2;if(height[i] > MaxV[mid]){low = mid+1;}else{high = mid-1;}}if(MaxV[high] > height[i])MaxV[high] = height[i];elseMaxV[high+1] = height[i];}}for(int i=0; i<=MaxL; ++i)cout<<MaxV[i]<<" ";cout<<endl;cout<<MaxL<<endl;system("PAUSE");}

                                             
0 0
原创粉丝点击