列表

详情


KS23. 非递减序列

描述

对于一个长度为 n 的整数序列,你需要检查这个序列最多改变一个数后是否可以是非递减序列。
非递减序列的定义是:array[i]<=array[i+1] , for 1<=i<n;

数据范围: , 数组中的值满足


输入描述

输入是一个长度为n的整数序列。

输出描述

输出为; 是为1; 否为0

示例1

输入:

3 4 6 5 5 7 8

输出:

1

说明:

将6变成4, 序列变成 [3 4 4 5 5 7 8],符合非递减序列,因此输出1

示例2

输入:

3 4 6 5 4 7 8

输出:

0

原站题解

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-17

#include <bits/stdc++.h>
using namespace std;

int main(){
    int m;
    stack<int> v;
    int c=0;
    while(cin>>m){
        if(v.empty()) 
            v.push(m);
        else if(m<v.top()&&c==0) 
        {//遇到第一个不满足条件的数
            v.pop();
            if(!v.empty()&&m<v.top()) { 
                cout<<0<<endl;
                return 0;
            }
            else if(v.empty()){
                v.push(m);
                v.push(m);
            }
            else {
                v.push(v.top());
                v.push(m);}
            c++;
        }
        else if(m<v.top()&&c)
        {
            cout<<0<<endl;
            return 0;
        }
        else 
            v.push(m);
    }
    cout<<1<<endl;
    return 0;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 404KB, 提交时间: 2022-01-15

#include <bits/stdc++.h>
using namespace std;

int main(){
    int m;
    stack<int> v;
    int c=0;
    while(cin>>m){
        if(v.empty()) v.push(m);
        else if(m<v.top()&&c==0) {//遇到第一个不满足条件的数
            v.pop();
            if(!v.empty()&&m<v.top()) { 
                cout<<0<<endl;return 0;
            }
            else if(v.empty()){
                v.push(m);
                v.push(m);
            }
            else {
                v.push(v.top());
                v.push(m);}
            c++;
        }else if(m<v.top()&&c){
            cout<<0<<endl;
            return 0;
        }else v.push(m);
    }
    cout<<1<<endl;
    return 0;
}

上一题