Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中最小交换hackerrank问题的求解+;_C++_Algorithm_Data Structures - Fatal编程技术网

C++ C+中最小交换hackerrank问题的求解+;

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

我有一个关于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){
    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达到原始数组大小,这意味着访问了所有元素。