![](/img/trans.png)
[英]I was performing array rotation but getting incorrect output. anyone can tell me what is wrong with the code below?
[英]Array gives correct output for this mergesort function but vector is giving incorrect output. What is going wrong?
在過去的 2-3 天里,我一直在嘗試使用合並排序來解決計數反轉問題,經過多次嘗試,我剛剛從 Hackerrank 的社論中找到了答案,現在他們的代碼使用的是Array
,如果我使用的是Vector
的Array
,答案是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.