稀土掘金35 小S的倒排索引
问题描述
小S正在帮助她的朋友们建立一个搜索引擎。为了让用户能够更快地找到他们感兴趣的帖子,小S决定使用倒排索引。倒排索引的工作原理是:每个单词都会关联一个帖子ID的列表,这些帖子包含该单词,且ID按从小到大的顺序排列。
例如,单词“夏天”可能出现在帖子1、帖子3和帖子7中,那么这个单词的倒排链就是 [1, 3, 7]
。如果用户想同时找到包含“夏天”和“海滩”的帖子,小S需要找出两个倒排链的交集,且将结果按照从大到小的顺序输出。现在,给定两个单词的倒排链数组 a
和 b
,请你帮助小S找出同时包含这两个单词的帖子ID,并按从大到小的顺序返回结果。
测试样例
样例1:
输入:a = [1, 2, 3, 7], b = [2, 5, 7]
输出:[7, 2]
样例2:
输入:a = [1, 4, 8, 10], b = [2, 4, 8, 10]
输出:[10, 8, 4]
样例3:
输入:a = [3, 5, 9], b = [1, 4, 6]
输出:[]
样例4:
输入:a = [1, 2, 3], b = [1, 2, 3]
输出:[3, 2, 1]
思路:
通过迭代器逐个比较a和b两个vector中的值,当发现一样就放到答案C中,如果a的值大于b的值就让b的迭代器++,反之如果a的值小于b的值就让a的迭代器++,当有一个vector被遍历完时while循环结束,使用reverse函数反转vector然后返回。
代码:
vector<int> solution(vector<int>& a, vector<int>& b) {
vector<int> C;
auto A = a.begin(), B = b.begin();
while(A != a.end() && B != b.end())
{
if(*A == *B) C.push_back(*A), ++A, ++B;
else if (*A > *B) ++B;
else ++ A;
}
reverse(C.begin(), C.end());
return C;
}
ps:我发现稀土掘金的简单题都好有意思,可以学到挺多stl容器的用法。