c++ - 使用归并排序计数倒置
问题描述
我在 C++ 中使用合并排序编写了计数反转的代码,但我得到了错误的答案
#include <bits/stdc++.h>
using namespace std;
long long merge(long long *arr,long long s, long long mid,long long e){
long long count =0;
long long temp[e-s+1];
long long i = s;
long long j = mid+1;
long long k =0;
while(i<=mid && j<=e){
if(arr[i]<arr[j]){
temp[k++] = arr[i++];
}else{
temp[k++] = arr[j++];
count = count + (mid+1)-i;
}
}
while(i<=mid){
temp[k++] = arr[i++];
}
while(j<=e){
temp[k++] = arr[j++];
}
k=0;
for(i=s;i<=e;i++){
arr[i] = temp[k++];
}
return count;
}
long long mergeSort(long long *arr,long long s,long long e){
long long count =0;
if(s<e){
long long mid = (s+e)/2;
count += mergeSort(arr,s,mid);
count += mergeSort(arr,mid+1,e);
count += merge(arr,s,mid,e);
}
return count;
}
int main(){
long long x;
cin >> x;
long long arr[x];
for(long long i=0;i<x;i++){
cin >> arr[i];
}
long long N =x;
cout << mergeSort(arr,0,N-1);
}
它失败了这个测试用例
Array size : 42
elements : 468 335 1 170 225 479 359 463 465 206 146 282 328 462 492 496 443 328 437 392 105 403 154 293 383 422 217 219 396 448 227 272 39 370 413 168 300 36 395 204 312 323
正确输出
494
我的代码的输出
495
解决方案
推荐阅读
- algorithm - 为什么我的 AdaBoost 实现一遍又一遍地重复相同的两个拆分?
- javascript - Do...While 循环后无法获得价值
- dart - 检查一个列表是否包含第二个列表中的每个元素
- angular - 如何将图像图标添加到 ant design ng zorro 侧栏
- node.js - NodeJs + i18n:服务器重新启动,因为 bot 尝试访问随机 URL 进行黑客攻击
- c - 循环后如何访问C中结构的第一个元素
- airflow - 气流日志文件权限被拒绝
- vue.js - Firebase 在日期范围内获取客人
- powershell - 更好地理解 Powershell 中的点符号
- flutter - 如何使用 DateTime 作为时间间隔?