翻转数组

翻转数组

									题目描述

给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列。其中数组片段[l,r]表示序列a[l], a[l+1], ..., a[r]。原始数组为

a[1], a[2], ..., a[l-2], a[l-1], a[l], a[l+1], ..., a[r-1], a[r], a[r+1], a[r+2], ..., a[n-1], a[n],

将片段[l,r]反序后的数组是

a[1], a[2], ..., a[l-2], a[l-1], a[r], a[r-1], ..., a[l+1], a[l], a[r+1], a[r+2], ..., a[n-1], a[n]。

这道题比较简单。

代码如下:

#include<iostream>
#include <vector>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        vector<int> in(n);
        for(int i=0;i<n;i++)
            cin>>in[i];
        int k=0, m=0;
        bool flag1=true, flag2=true;
        for(int i=0;i<n-1;i++){
            if(in[i]<in[i+1]&&flag1){
                continue;
            }
            else {
                if(flag1) {k=i;  flag1=false;}
                if(in[i]>in[i+1])
                    continue;
                else{
                    m=i;
                    break;
                }
            }
        }
        if(k==m||in[k]>in[m+1]){
            cout<<"no"<<endl;
            continue;
        }
        int i=m;
        for(;i<n-1;i++){
            if(in[i]>in[i+1]){
                cout<<"no"<<endl;
                break;
            }
        }
        if(i>=n-1)
            cout<<"yes"<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/lqwh/p/7524255.html