簡體   English   中英

Array 為這個歸並排序函數提供了正確的輸出,但 vector 給出了不正確的輸出。 出了什么問題?

[英]Array gives correct output for this mergesort function but vector is giving incorrect output. What is going wrong?

在過去的 2-3 天里,我一直在嘗試使用合並排序來解決計數反轉問題,經過多次嘗試,我剛剛從 Hackerrank 的社論中找到了答案,現在他們的代碼使用的是Array ,如果我使用的是VectorArray ,答案是Actual answer + 1 (或不同,至少在很多情況下都沒有嘗試過)。 我想知道可能是什么原因。

我還有另一個關於此代碼解釋的問題,特別是變量聲明及其在 mergei 函數中的使用。 我從概念上理解代碼的其余部分,但由於這一部分,我有些困惑。

    int ni = ((i+j)/2) + 1, nj = j + 1;
    int s = i;
    int* arr = new int [j - i + 1];
    j = ni; int k = 0;

代碼:

void mergei(int a[], int i, int j) {
    int ni = ((i+j)/2) + 1, nj = j + 1;
    int s = i;
    int* arr = new int [j - i + 1];
    j = ni; int k = 0;

    while(i < ni && j < nj) {
        if(a[i] <= a[j]) {
            arr[k++] = a[i++];
        } else {
            arr[k++] = a[j++];
            ans += (ni-i);
        }
    }

    for(; i < ni; i++, k++) arr[k] = a[i];
    for(; j < nj; j++, k++) arr[k] = a[j];
    for(k = 0; s < nj; s++, k++) a[s] = arr[k];
    delete [] arr;
}

void m_sort(int a[], int i, int j) {
    if(i < j) {
        m_sort(a, i, (i+j)/2);
        m_sort(a, ((i+j)/2) + 1, j);
        mergei(a, i, j);
    }
}

int main() {
    // vector<int> a = {2, 1, 3, 1, 2};
    int a[] = {2, 1, 3, 1, 2};
    // int n = a.size();
    int n = sizeof(a)/sizeof(a[0]);
    m_sort(a, 0, n - 1);
    cout << ans << endl;
    return 0;
}

我沒有通過引用傳遞 Vector,在數組的情況下我不必擔心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM