首页 > 试题广场 >

小Q的排序

[编程题]小Q的排序
  • 热度指数:4606 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

小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
头像 白伟仝
发表于 2020-06-27 17:45:16
答案只有0,1,2,3四种情况: import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); 展开全文
头像 我叫RT
发表于 2021-09-02 18:36:44
/* 思路:将最小值排到最左侧,然后以最小值为n,进行一次排序 或 将最大值排到最右侧,然后以最大值为n,进行一次排序 情况一:排序一次: 最小值在最左侧,以最小值为n 情况二:排序两次 1)最小值在最右侧,最大值不再最左侧,{x,3,max,1,4,min} -以最左侧为n(x,min, 展开全文
头像 bandiaoz
发表于 2024-12-29 13:57:27
解题思路 题目要求: 有两种操作: 将前 个数排为升序 将后 个数排为升序 求最少需要多少次操作使序列变为升序 分析不同情况: 如果序列已经是升序,需要0次操作 如果最小值在开头或最大值在结尾,需要1次操作 如果最小值在结尾且最大值在开头,需要3次操作 其他情况需要2次操作 展开全文
头像 残魂::残剑
发表于 2021-09-24 22:41:21
#include <iostream> using namespace std; const int N=1000005; int n; int a[N]; int main() { cin>>n; for(int i=0;i<n;i++) 展开全文
头像
发表于 2021-09-01 17:38:41
#include <bits/stdc++.h> using namespace std; int main() { int n, ma = INT_MIN, mi = INT_MAX; vector<int> v; cin >> n; 展开全文
头像 bao_hu_yuan_zhang
发表于 2024-03-11 16:17:38
#include <iostream> #include <vector> using namespace std; int main() { int i=0; int n=0; cin>>n; vector <int&g 展开全文
头像 olddog#23
发表于 2022-10-27 17:20:16
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyn 展开全文
头像 17c89
发表于 2024-03-26 12:06:58
import java.util.Scanner; /** * QQ11 小Q的排序 * @author d3y1 */ public class Main { public static void main(String[] args){ Scanner in = 展开全文