腾讯校招笔试编程题

题目描述

小Q在学习许多排序算法之后灵机一动决定自己发明一种排序算法,小Q希望能将n个不同的数排序为升序。小Q发明的排序算法在每轮允许两种操作:

1、 将当前序列中前n-1个数排为升序

2、 将当前序列中后n-1个数排为升序

小Q可以任意次使用上述两种操作,小Q现在想考考你最少需要几次上述操作可以让序列变为升序。

输入描述:

输入包括两行,第一行包括一个正整数n(3≤n≤10^5),表示数字的个数

第二行包括n个正整数a[i](1≤a[i]≤10^9),即需要排序的数字,保证数字各不相同。

输出描述:

输出一个正整数,表示最少需要的操作次数

示例1

输入

复制

6
4 3 1 6 2 5

输出

复制

2

#include
#include
using namespace std;

int main(){
    int n;int Result;
    scanf("%d",&n);
    vector Input(n);
    for(int i = 0;i < n;i ++){
        int tmp;
        cin >> tmp;
        Input[i] = tmp;
    }
    int Max = Input[0];
    int Min = Input[0];
    bool isSorted = false;
    for(int i = 1;i < n;i ++){
        if(Max < Input[i]){
            Max = Input[i];
        }
        if(Min > Input[i]){
            Min = Input[i];
        }
        if(Input[i] < Input[i - 1]){
            isSorted = true;
        }
    }
    if(Min == Input[0] && Max == Input[n - 1]){
        if(isSorted){Result = 0;}
        else{Result = 1;}
    }
    else if(Min == Input[0] || Max == Input[n - 1]){
        Result = 1;
    }
    else{
        if(Min == Input[n - 1] && Max == Input[0]){
            Result = 3;
        }
        else{
            Result = 2;
        }
    }
    cout << Result <     return 0;
}

你可能感兴趣的:(腾讯校招笔试编程题)