题目描述
有一个N个数的数组,想要将数组从小到大排好序,但是只允许下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
求最少操作多少次可以使得数组从小到大有序。
输入描述
一共有T组测试数据。
第一行输入一个整数T(T<=100),表示测试数据的组数。
每组测试数据第一行输入一个正整数N,第二行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)
输出描述
对于每组测试数据,输出一个整数表示最少的操作次数。
输入样例
3 4 19 7 8 25 6 6 1 7 2 5 4 6 5 2 4 3 1 6
输出样例
2 3 5
AC代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int a[51];
int b[10000+51];
int main(int argc, char** argv) {
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int ans=n-1;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[a[i]+10000]=i;
}
sort(a,a+n);
for(int i=0;i<n-1;i++)
{
if(b[a[i]+10000]<=b[a[i+1]+10000])
{
ans--;
}
else
{
break;
}
}
cout<<ans<<endl;
}
return 0;
}