• 翻转数组


    题目描述:给定一个长度为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]。

    输入

    第一行数据是一个整数:n (1≤n≤105),表示数组长度。

    第二行数据是n个整数a[1], a[2], ..., a[n] (1≤a[i]≤109)。

    输出

    输出“yes”,如果存在;否则输出“no”,不用输出引号

    样例输入

    4

    2 1 3 4

    样例输出

    yes

    #include<iostream>
    using namespace std;
    
    int isreverse(int *p,int l,int r)
    {
    for(int i=l;i<=r;i++)
            {
            if(p[i+1]<p[i])
            break;
            if(i==r-1)
            return 1;
            }
            return 0;
    }
            
    int notreverse(int *p,int l,int r)
    {
    for(int i=l;i<=r;i++)
            {
            if(p[i+1]>p[i])
                break;
            if(i==r-1)
                return 1;
            }
            return 0;
    }
            
    int judge(int *p,int n)
    {
       if(n=1)
       cout<<"yes";
    else 
    {
    for(int l=1;l<n-2;l++)
            for(int r=l+1;r<n-1;r++)
            {
               if(isreverse(p,0,l)&&notreverse(p,l,r)&&isreverse(p,r,n-1))
                cout<<"yes";
                 cout<<"no";
            }
    }
    }
                    
                    
     int main()
    {
        int m;
        int n;
        cin>>m;
        int *p=new int[m];
        for(int i=0;i<m;i++)
       {
          cin>>n;
        *(p+i)=n;
        }
          judge(p, m);
     } 
  • 相关阅读:
    Harbor1.5.2批量清理无效镜像
    前端私服地址修改
    Paxos算法
    缓存淘汰算法--LRU算法
    一致性哈希
    mysql常见知识点总结
    mysql分库分表(二)
    mysql分库分表(一)
    dubbo学习小结
    dubbo超时重试和异常处理
  • 原文地址:https://www.cnblogs.com/victorywr/p/13359537.html
Copyright © 2020-2023  润新知