C++ 如何在连续无序数组(向量)中找到最小交换数?
我试图解决一个问题: 您将得到一个无序数组,该数组由连续整数[1,2,3,…,n]组成,没有任何重复项或特定顺序。您可以交换任意两个元素。您需要找到按升序排序数组所需的最小交换次数 限制条件:C++ 如何在连续无序数组(向量)中找到最小交换数?,c++,sorting,C++,Sorting,我试图解决一个问题: 您将得到一个无序数组,该数组由连续整数[1,2,3,…,n]组成,没有任何重复项或特定顺序。您可以交换任意两个元素。您需要找到按升序排序数组所需的最小交换次数 限制条件: 元素数必须大于等于1 数组中的元素必须用其值(arr.size()-1)替换lastElementIndex 一致 if (lastElementIndex - (arr.size() - arr[i]) != 0) 屈服 if ((arr.size() - 1) - (arr.size() - ar
- 元素数必须大于等于1
- 数组中的元素必须用其值
替换(arr.size()-1)
一致lastElementIndex
屈服if (lastElementIndex - (arr.size() - arr[i]) != 0)
这相当于if ((arr.size() - 1) - (arr.size() - arr[i]) != 0)
这显然是错误的。将线路更换为if (arr[i] != 1)
if (arr[i] - 1 != i)
这与问题无关:您可以使用@ThomasSablik谢谢
相当于if(lastElementIndex-(arr.size()-arr[i])!=0)
。我不明白这种情况。请描述您的算法。@ThomasSablik例如[1 3 5 2 4 6 7],if(arr[i]-1!=0)
总是6,所以lastElementIndex
与6-(7-1)=0相同,因为当如果(lastElementIndex-(arr.size()-arr[i])
时,值0意味着它不需要更改,这就是为什么我只使用arr[i]==1
当它不同于0时,循环中的swap()
是否应该增加并抓取下一个元素以检查它是否位于正确的位置?您应该将i
替换为其常量lastElementIndex
。然后得到(arr.size()-1)
即如果((arr.size()-1)-(arr.size()-arr[i])!=0)
。如果(arr[i]!=1)
if (arr[i] - 1 != i)