1. 程式人生 > >翻轉數組

翻轉數組

數組a urn iostream cnblogs ios 簡單 col ostream int

翻轉數組

									題目描述

給定一個長度為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; }

翻轉數組