京东合唱队

动态规划:all[i]表示以第i位数结尾的最大分组数,max[i]表示以i结尾的数组里面的最大的数字,all[i]=all[k]+1(vec[i]>=max[k])测试用例都过了,为啥AC0.38,求大佬指出错误!
#include <iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<int> vec;
	for (int i = 0; i < n; i++)
	{
		int k;
		cin >> k;
		vec.push_back(k);
	}
	vector<int> all(n);
	vector<int> max(n);
	all[0] = 1;
	max[0] = vec[0];
	for (int i = 1; i < vec.size(); i++)
	{
		int j = i - 1;
		for (; j >= 0; j--)
		{
			if (max[j] <= vec[i])
			{
				all[i] = all[j] + 1;
				if (vec[i] > max[i - 1])
					max[i] = vec[i];
				else
					max[i] = max[i - 1];
				break;
			}
		}
		if (j == -1)
		{
			max[i] = vec[i];
			all[i] = 1;
			continue;
		}
	}
	cout << all[vec.size() - 1];
}


#京东##笔试题目#
全部评论
和我思路一样,果然都错了😂
点赞 回复
分享
发布于 2019-08-24 21:06
我有100%代码😏
点赞 回复
分享
发布于 2019-08-24 21:09
滴滴
校招火热招聘中
官网直投
我18,就跑了一个测试用例😂😂
点赞 回复
分享
发布于 2019-08-24 21:10
暴力解法:😂 #include<bits/stdc++.h> using namespace std; int main() {     int N, ele;     vector<int> data;     cin >> N;     for(int i=0; i<N; i++)     {         cin >> ele;         data.push_back(ele);     }     vector<int> data_ori = data;     sort(data.begin(), data.end());     int cnt = 0;     int start = 0, end = 1;     while(end<=data.size())     {         vector<int> tmp_1 (data_ori.begin()+start, data_ori.begin()+end);         sort(tmp_1.begin(), tmp_1.end());         vector<int> tmp_2(data.begin()+start, data.begin()+end);         if(tmp_1==tmp_2)         {             cnt ++;             start = end;             end ++;         }         else             end ++;     }     cout << cnt;     return 0; }
点赞 回复
分享
发布于 2019-08-24 21:18

相关推荐

投递华为等公司10个岗位
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务