给定一个int数组men,代表参加一场游戏依次来的每个人的身高,同时给定总人数n,要求一个人站在另一个人肩膀上,且下面的人比上面的人要更高一点。请返回最多能够叠的人数。注意参加游戏的人的先后顺序与原序列中的顺序应该一致保证,且n小于等于500。
测试样例:
[1,6,2,5,3,4],6
返回:4
class Stack {
public:
int getHeight(vector<int> men, int n) {
// write code here
vector<int> dp(n, 1);
int res = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
if(men[j] < men[i]) dp[i] = max(dp[i], dp[j]+1);
}
res = max(res, dp[i]);
}
return res;
}
};
时间复杂度nlog(n)。