头条的笔试题
测试的原因只做了2道,都是一次过了,感觉是在考察数据结构,没有算法,数据结构用对了就是遍历一遍数出来。看懂数据结构了,就很简单了,贴出来分享下自己的想法。
串珠:
#include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<algorithm> #include<iterator> using namespace std; int main() { int n, m, c; cin >> n >> m >> c; vector<set<int>>record(c+1); string temp; int num; int cx; for (int i = 0; i < n; i++) { cin >> num; for (int j = 0; j < num; j++) { cin >> cx; record[cx].insert(i); } } int result = 0; for (int i = 1; i < c+1; i++) { int last = 0; for (set<int>::iterator s = record[i].begin(); s != record[i].end();s++){ if (s != record[i].begin() && (*s) - last <m) { result++; break; } last = *s; } if (record[i].size() >1 && (*(record[i].begin()) == 0) && last == n-1){ result++; } } cout << result << endl; system("pause"); return 0; }
喜好的:
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; }
#字节跳动#