22,298
社区成员




大王特别喜欢把序列从小到大排列,如1,2,3,4,5
。他认为这样的序列充满美感。现在,大王有一个长度为n的序列Array ,是由n个数字1~n
的排列组合而成的,且每个数字仅出现一次。如序列7,3,4,6,5,1,2
。
大王每次可以选择任意一对整数 (i,j)(i,j) ,使得 1≤i<j≤n1≤i<j≤n .交换 AA 的 ithith 和 jthjth 位置上的元素。
现在它想知道,这个序列最少经过多少次操作,可以把序列A变换成 (1,2,…,N)(1,2,…,N)?
我的代码:
#include <bits/stdc++.h>
using namespace std;
int selection_sort(vector<int>& arr) {
int s=0,len=arr.size();
for (int i=0;i<len-1;i++)
{
int min=i;
for (int j=i+1;j<len;j++)
{
if (arr[j]<arr[min]) min=j;
}
if (min!=i)
{
swap(arr[min],arr[i]);s++;
}
};return s;
}
int main()
{
int n=0;cin >> n;vector<int> a(n);
for (int i=0;i<n;i++) cin >> a[i];
cout << selection_sort(a) << endl;
}
总是显示超时,时长3秒,但答案正确
求大佬帮助,非常感谢!