问题描述
小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]
笔记
解题思路
- 理解交集操作:我们需要找出两个列表中共同的元素。
- 排序要求:找到交集后,需要将结果按从大到小的顺序排列。
数据结构选择
- 可以使用集合(
set
)来快速查找交集。 - 使用列表(
list
)来存储最终结果并进行排序。
算法步骤
- 将两个列表转换为集合。
- 使用集合的交集操作找到共同的元素。
- 将交集结果转换为列表并按从大到小的顺序排序。
代码实现
# 将列表转换为集合
set_a = set(a)
set_b = set(b)
# 找到两个集合的交集
intersection = set_a & set_b
# 将交集结果转换为列表并按从大到小的顺序排序
result = sorted(intersection, reverse=True)
return result
if __name__ == '__main__':
print(solution([1, 2, 3, 7], [2, 5, 7]) == [7, 2])
print(solution([1, 4, 8, 10], [2, 4, 8, 10]) == [10, 8, 4])
print(solution([3, 5, 9], [1, 4, 6]) == [])
print(solution([1, 2, 3], [1, 2, 3]) == [3, 2, 1])
关键步骤解释
set_a = set(a)
和set_b = set(b)
:将列表转换为集合,以便快速查找交集。intersection = set_a & set_b
:使用集合的交集操作找到共同的元素。result = sorted(intersection, reverse=True)
:将交集结果按从大到小的顺序排序。
测试用例
在 if __name__ == '__main__':
部分,我们添加了一些测试用例来验证代码的正确性。