翻转数组

Posted lqwh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转数组相关的知识,希望对你有一定的参考价值。

翻转数组

									题目描述

给定一个长度为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;
}

 

以上是关于翻转数组的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

华为OD机试真题Python实现翻转单词顺序真题+解题思路+代码(2022&2023)

使用嵌套片段和动画对象

翻转数组

翻转数组

code第一部分数组:第十五题 矩阵翻转(图像翻转)