C++ 如何在连续无序数组(向量)中找到最小交换数?

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,2,3,…,n]组成,没有任何重复项或特定顺序。您可以交换任意两个元素。您需要找到按升序排序数组所需的最小交换次数

限制条件:

  • 元素数必须大于等于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)
    相当于
    if(arr[i]-1!=0)
    。我不明白这种情况。请描述您的算法。@ThomasSablik例如[1 3 5 2 4 6 7],
    lastElementIndex
    总是6,所以
    如果(lastElementIndex-(arr.size()-arr[i])
    与6-(7-1)=0相同,因为当
    arr[i]==1
    时,值0意味着它不需要更改,这就是为什么我只使用
    swap()
    当它不同于0时,循环中的
    i
    是否应该增加并抓取下一个元素以检查它是否位于正确的位置?您应该将
    lastElementIndex
    替换为其常量
    (arr.size()-1)
    。然后得到
    如果((arr.size()-1)-(arr.size()-arr[i])!=0)
    如果(arr[i]!=1)
    if (arr[i] - 1 != i)