题解 | #排序子序列#
排序子序列
http://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471
1 2 3 3 2 1中的 1 2 3 子序列是递增也是非递减,满足。
3 2 1 是递减的,也是非递增,同样满足。
也就是只要遍历非递减或者非递增,就能逐个排除。
注意while遍历时不要越界,把 i < v.size() 写在前面。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> v;
v.resize(n);
int tmp = 0;
while(n--){
cin >> v[tmp++];
}
int ret = 0, i = 0;
while(i < v.size()){
if(v[i] < v[i+1]){
while(i < v.size() && v[i] <= v[i+1]) // 遍历非递减
++i;
++i, ++ret;
}
else if(v[i] == v[i+1]) // 相等时不能判断
++i;
else{
while(i < v.size() && v[i] >= v[i+1]) // 遍历非递增
++i;
++i, ++ret;
}
}
cout << ret << endl;
return 0;
}