代码之家  ›  专栏  ›  技术社区  ›  Aadil Hoda

倒数错误答案?

  •  -1
  • Aadil Hoda  · 技术社区  · 6 年前
    void merge(vector<int> arr, int l, int m, int r,int &count)
    {
        int i, j, k;
        int n1 = m - l + 1;
        int n2 =  r - m;
    
        /* create temp arrays */
        vector<int> L, R;
    
        /* Copy data to temp arrays L[] and R[] */
        for (i = 0; i < n1; i++)
            L.push_back(arr[l+i]);
        for (j = 0; j < n2; j++)
            R.push_back(arr[m+1+j]);
         /* Merge the temp arrays back into arr[l..r]*/
        i = 0; // Initial index of first subarray
        j = 0; // Initial index of second subarray
        k = l; // Initial index of merged subarray
        while (i < n1 && j < n2)
        {
            if (L[i] <= R[j])
            {
                arr[k] = L[i];
                i++;
            }
            else
            {
                arr[k] = R[j];
                count+=(n1-i);
                j++;
            }
            k++;
        }
    
        /* Copy the remaining elements of L[], if there
           are any */
        while (i < n1)
        {
            arr[k] = L[i];
            i++;
            k++;
        }
    
        /* Copy the remaining elements of R[], if there
           are any */
        while (j < n2)
        {
            arr[k] = R[j];
            j++;
            k++;
        }
    }
    
    /* l is for left index and r is right index of the
       sub-array of arr to be sorted */
    void mergeSort(vector<int> arr, int l, int r,int &count)
    {
        if (l < r)
        {
            // Same as (l+r)/2, but avoids overflow for
            // large l and h
            int m = l+(r-l)/2;
    
            // Sort first and second halves
            mergeSort(arr, l, m,count);
            mergeSort(arr, m+1, r,count);
    
            merge(arr, l, m, r,count);
        }
    }
    
    int Solution::countInversions(vector<int> &A) {
        int count = 0;
        mergeSort(A,0,A.size()-1,count);
        return count;
    }
    

    这是我计算倒数的代码。我也很早就解决了这个问题,所以我对自己实现的逻辑很有信心,我不知道为什么它没有通过一些面试BIT测试用例的测试。任何帮助都将不胜感激!谢谢。

    您提交以下输入失败:

    A : [ 84, 2, 37, 3, 67, 82, 19, 97, 91, 63, 27, 6, 13, 90, 63, 89, 100, 60, 47, 96, 54, 26, 64, 50, 71, 16, 6, 40, 84, 93, 67, 85, 16, 22, 60 ]
    

    函数返回以下内容:

    372
    

    预期返回值:

    290
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Scott Hunter    6 年前

    在递归的每一个层次上都在计算逆运算;问题(显然)只对输入数组中的逆运算感兴趣。

    如果我对输入数组应用反转的定义,就会得到预期的返回值。