题解 | #排序子序列#

排序子序列

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;
}
全部评论
还是没读懂题目意思,我是fw
1 回复 分享
发布于 2022-10-12 14:29 江苏
注意,i+1访问是会越界,只不过牛客的测试用例没有检测出来。
点赞 回复 分享
发布于 2022-09-06 14:12 广东
题目中不是说明子序列要是非递增或者非递减 但是样例解释 123 221 两个子序列 123子序列不是递增的吗 这不是明显不符合定义,我很不理解
点赞 回复 分享
发布于 2022-10-10 20:38 河南

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务