-
Notifications
You must be signed in to change notification settings - Fork 1
/
37_数组中的逆序对
71 lines (66 loc) · 1.2 KB
/
37_数组中的逆序对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <vector>
using namespace std;
/*
题目描述:
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
*/
// 1 3 5 6 4 2 1
class Solution
{
public:
//最笨的方法
int InversePairsFool(vector<int> data)
{
int RetCount = 0;
for (int i = 0; i < data.size(); ++i)
{
for (int j = 0; j < i; j++)
{
if (data[j] > data[i])
{
++RetCount;
}
}
}
return RetCount;
}
int InversePairs(vector<int> data)
{
int RetCount = 0;
if (data.empty())
{
return RetCount;
}
vector<int> UsedVal;
for (int i = 0; i < data.size(); ++i)
{
int tmp = data[i];
int usize = UsedVal.size() - 1;
if (UsedVal.empty())
{
UsedVal.push_back(tmp);
continue;
}
UsedVal.push_back(tmp);
++usize;
while (usize >= 1 && UsedVal[usize] < UsedVal[usize - 1])
{
swap(UsedVal[usize], UsedVal[usize - 1]);
++RetCount;
--usize;
}
}
return RetCount;
}
};
void Test()
{
vector<int> ivec = { 1, 2, 3, 4, 7, 6, 5 };
cout << Solution().InversePairs(ivec) << endl;
}
int main()
{
Test();
return 0;
}