题解 | #排序子序列#

排序子序列

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

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 17:58
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务