大佬帮我看看 昨天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的排序再次比较
#笔试题目##京东#