451B - Sort the Array

本文介绍了一种通过反转数组中的特定子序列来构造非降序数组的方法。该方法适用于整数数组,并通过查找不符合升序条件的子串进行反转处理。最终确保整个数组元素呈非降序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题的意识是给你一个整形数组,含有很多数字,然后让你通过讲中间的某一个字串颠倒过来,让他成为不下降的数组。其实这题都是特简单的,只要你找到一个不满足上升的字串,然后反过来,直接break,最后判断是不是非下降排列即可。

#include<iostream>
using namespace std;
#include<cstring>
#include<stdio.h>
int a[100005];
int main()
{
    int N;
    int i,j,k;
    while(cin>>N)
    {
        k=0;//标记
        int i1=0,j1=0;
        for(i=0;i<N;i++)
            scanf("%d",&a[i]);
        for(i=0;i<N-1;i++)
            {
                if(a[i]>a[i+1])
                {
                    if(!k)
                    {
                    k=1;
                    i1=i;
                    }
                }
                else if(k)
                {
                    j1=i;
                   break;
                }
            }
            if(k&&j1==0)j1=N-1;
           // cout<<i1<<" "<<j1<<endl;
            k=j1;
        for(i=i1;i<=(j1+i1)/2;i++,k--)
        {
            j=a[i];
            a[i]=a[k];
            a[k]=j;
        }
        k=0;
        for(i=0;i<N-1;i++)
            if(a[i]>a[i+1])
            {
                    k=1;
            break;
            }
       // for(i=0;i<N;i++)
         //   cout<<a[i]<<" ";
        if(k)cout<<"no"<<endl;
        else {
                cout<<"yes"<<endl;
           cout<<(i1+1)<<" "<<(j1+1)<<endl;
           }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值