C++ C+中最小交换hackerrank问题的求解+;
我有一个关于Hackerrank的最小交换问题 基本上,问题是找到排序数组所需的交换数量 数组不包含任何重复的元素 这是我的密码,但我似乎得到了一个错误的答案。特别是,我得到了向量temp的数组长度的4倍C++ C+中最小交换hackerrank问题的求解+;,c++,algorithm,data-structures,C++,Algorithm,Data Structures,我有一个关于Hackerrank的最小交换问题 基本上,问题是找到排序数组所需的交换数量 数组不包含任何重复的元素 这是我的密码,但我似乎得到了一个错误的答案。特别是,我得到了向量temp的数组长度的4倍 int minimumSwaps(vector<int> arr) { int n = arr.size(); int count_swap = 0; vector<int> temp; for(int i = 0; i < n; ++i){ cou
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;
}
int最小互换(向量arr){
int n=阵列大小();
int count_swap=0;
向量温度;
对于(int i=0;i2
因此有一个长度为4的循环。因此,所需的最小交换为4-1=3。(因为其他5个循环已经就位,且循环长度为1,因此需要0个交换).该算法迭代向量中的每个元素,然后继续确定该元素的循环。因此,它遇到第一个循环四次。该算法可能会迭代向量中的循环。这就是为什么我添加了if temp.size()==n break
for循环在每次迭代中增加索引i
。如果它会增加索引,使索引指向下一个循环的开始,这可能会给出您正在寻找的结果。是的,我同意,但因此我在下一行中设置了If条件,以便在循环结束后脱离整个循环temp.size达到原始数组大小,这意味着访问了所有元素。