题目描述
给出一个无序数列,每次只能交换相邻两个元素,求将原数列变成递增数列的最少交换次数。 如:数列:2,3,1,交换3和1后变成:2,1,3;交换1和2之后变成:1,2,3。总共交换2次。
输入:
逗号隔开的正整数数列
输出:
正整数
输入样例
2,3,1
输出样例
2
题解思路
- 可以转换成求逆序数对
代码实现:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
while (cin >> s) {
vector<int> v;
while (s.size()) {
int n = s.find(',');
if (n == -1) {
break;
}
string str = s.substr(0, n);
int num = stoi(str);
v.push_back(num);
s = s.substr(n + 1);
}
int num = stoi(s);
v.push_back(num);
// 求逆序数对
int count = 0;
for (int i = 0; i < v.size(); ++i) {
for (int j = i + 1; j < v.size(); ++j) {
if (v[i] > v[j]) {
++count;
}
}
}
cout << count << endl;
}
return 0;
}