大佬帮我看看 昨天JD第一题思路有什么问题
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void Func(vector<long long int> arr, vector<long long int> tmp, int it, int num, int &count)
{
if (it == num)
return;
int cur = find(tmp.begin() + it, tmp.end(), arr[it]) - tmp.begin();
while (1) {
sort(it + tmp.begin(), tmp.begin() + cur + 1);
if (tmp[cur] == arr[cur]) {
count++;
Func(arr, tmp, cur + 1, num, count);
break;
}
else
cur++;
}
}
int main()
{
int num;
while (cin >> num) {
vector<long long int> arr(num);
for (int i = 0; i < num; i++)
cin >> arr[i];
vector<long long int> tmp = arr;
sort(tmp.begin(), tmp.end());
int count = 0;
Func(tmp, arr, 0, num, count);
cout << count << endl;
}
return 0;
} 思路:
1.拿有序数列和原数列进行对比,依次寻找原队列beg位置的元素在有序队列中的位置cur
2.然后将原数列beg~cur之间的元素排序,比较原数列cur的位置和有序数列cur的值是否相同
1>若相同则将beg~cur分为一组
2>不同cur++再次进行beg~cur的排序再次比较
#笔试题目##京东#
查看17道真题和解析