在C++中解决最小掉期黑客排名问题

Solving Minimum swaps hackerrank question in C++

本文关键字:黑客 问题 C++ 解决      更新时间:2023-10-16

我有一个关于黑客兰克的最低掉期问题的问题。

基本上,问题是找到对数组进行排序所需的交换次数。

数组不包含任何重复的元素。

这是我的代码,但我似乎得到了错误的答案。特别是,我得到的矢量温度是数组长度的 4 倍。

int minimumSwaps(vector<int> arr) {
int n = arr.size();
int count_swap = 0;
vector<int> temp;
for(int i = 0; i < n; ++i){
cout << temp.size()<<"n";
if(arr[i] == i+1){
temp.push_back(arr[i]);
}
else{
int initial_val = arr[i];
int next_val = arr[arr[i] - 1];
temp.push_back(initial_val);
while(next_val != initial_val){
temp.push_back(next_val);
next_val = arr[next_val - 1];
count_swap += 1;
}
}
if (temp.size() == n){
break;
}      
}
print(temp);
return count_swap;

}

我的方法是在数组中找到一个循环循环,所需的最小交换次数是该数字 - 1。

例如,如果我们有 arr = [2,3,4,1,5]

2 -> 3 -> 4 -> 1 -> 2

所以有一个长度为 4 的循环。因此,所需的最小隔夜利息为 4-1 =3。(由于其他 5 个已经就位并且循环长度 = 1,因此需要 0 次交换(。

该算法遍历向量中的每个元素,然后继续确定该元素的循环。因此,它遇到第一个循环四次。该算法应该在向量中

迭代循环。