在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数
。
示例 1:
输入: [3,1,4,5,2]
输出: 4
这道题的思路借鉴了该死的奥数那道题,运用二维数组,第一行表示数字,第二行表示是否访问过,但是没有运用递归
# include <iostream>
using namespace std;
# define N 5 //几位数
int DFS(int A[2][N]);
int main() {
int A[2][N] = { 3,1,4,5,2 ,0 };//A[0]存放数字 A[1]存放标志
int count = 0;
DFS(A);
return 0;
}
int DFS(int A[2][N])
{
int count = 0;
int n = 5;
for (int i = 0;i < n;i++)
{
for (int j = i + 1;j < n;j++)
{
if (A[1][j] == 0)
{
if (A[0][j] < A[0][i])
{
count++;
A[1][j] = 1;
}
else
A[1][j] = 1;
A[1][j] = 0;
}
}
}
cout <<"逆序数的个数:" << count;
return count;
}