在C++中解决最小掉期黑客排名问题
Solving Minimum swaps hackerrank question in C++
我有一个关于黑客兰克的最低掉期问题的问题。
基本上,问题是找到对数组进行排序所需的交换次数。
数组不包含任何重复的元素。
这是我的代码,但我似乎得到了错误的答案。特别是,我得到的矢量温度是数组长度的 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 次交换(。
该算法遍历向量中的每个元素,然后继续确定该元素的循环。因此,它遇到第一个循环四次。该算法应该在向量中
迭代循环。相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 需要帮助调试"attribute parser"!C++ 来自黑客排名的问题
- 这是一个二叉搜索树吗?黑客排名问题
- 在黑客地球上没有获得以下C ++代码问题的输出
- 在C++中解决最小掉期黑客排名问题
- 优化:黑客地球邮递员软件工程师实习生问题
- 得到~对标准输出没有回应~在黑客排名问题上
- 为什么在黑客兰克的许多问题中都会完成拆分字符串
- 黑客排名最小最大值问题,最大总和给出错误的负值
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- 围绕黑客排名的问题 30 天代码,第 6 天 [C++]
- 黑客世界,霍格沃茨的女巫们.我的方法有什么问题?