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

相关推荐

momo_校招版:给佬跪了 我周末三场都有点嫌多了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务