今日头条编程题

第二题查询喜爱度,暴力只能过50%。
自己改进以后得方法如下,本地可以运行,但是提交以后一直报段错误,求大神指导错在哪。。
如果最大喜爱度为k,有n个用户,空间复杂度为O(k*n),是因为空间复杂度太大吗?
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	int n;
	cin >> n;
	vector<int>like(n+1, 0);
	for (int i = 1; i <= n; i++) cin >> like[i];//n个人
	int maxlike = *max_element(like.begin(), like.end());
	vector<vector<int>>vec(maxlike+1, vector<int>(n+1,0));
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			vec[like[i]][j]++;
		}
	}
	int q;
	cin >> q;
	for (int i = 0; i < q; i++) {
		int l, r, k;
		cin >> l >> r >> k;
		cout << vec[k][r]-vec[k][l-1] << endl;
	}
	return 0;
}
全部评论
你这复杂度n^2吧。 而且题目好像没个k的范围,只是说了k是整数。不好处理。
点赞 回复 分享
发布于 2017-09-10 21:39
我也尝试着这样做了,但是居然通过率为0,不知道是不是中间哪个地方写错了。
点赞 回复 分享
发布于 2017-09-10 21:55
k要离散化,比如k如果是1e9,那么你的数组越界了
点赞 回复 分享
发布于 2017-09-10 22:16
把所有的查询操作排序,然后依次处理就好了呀~时间复杂度O(Q logQ) 代码地址:http://paste.ubuntu.com/25506027/
点赞 回复 分享
发布于 2017-09-10 22:19
另外问一句,现在哪里可以提交代码
点赞 回复 分享
发布于 2017-09-10 22:20
我的也是,在本机运行好端端的,传上去就一直不成功
点赞 回复 分享
发布于 2017-09-10 23:12
就是考数据结构的使用 int main(){ int n; map<int, set<int>> record; cin >> n; int tem; for (int i = 0; i < n; i++) { cin >> tem; record[tem].insert(i+1); } int q; cin >> q; vector<int>result(q); int l, r, k; int num = 0; for (int i = 0; i < q; i++) { cin >> l >> r >> k; num = 0; for (set<int>::iterator s = record[k].begin();s != record[k].end(); s++) { if ((*s) >= l && (*s) <= r){ num++; } } result[i] = num; } for (int i = 0; i < q; i++) { cout << result[i] << endl; } return 0; }
点赞 回复 分享
发布于 2017-09-10 23:20
我吧cin>>n,改成scanf就AC了
点赞 回复 分享
发布于 2017-09-12 15:22

相关推荐

秋招之BrianGriffin:你再跟他说华为工资也低(相对互联网)就可以享受私信爆炸了😋
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务