小S的倒排索引|豆包MarsCode AI刷题

70 阅读1分钟

01问题描述

小S正在帮助她的朋友们建立一个搜索引擎。为了让用户能够更快地找到他们感兴趣的帖子,小S决定使用倒排索引。倒排索引的工作原理是:每个单词都会关联一个帖子ID的列表,这些帖子包含该单词,且ID按从小到大的顺序排列。 例如,单词“夏天”可能出现在帖子1、帖子3和帖子7中,那么这个单词的倒排链就是 [1, 3, 7]。如果用户想同时找到包含“夏天”和“海滩”的帖子,小S需要找出两个倒排链的交集,且将结果按照从大到小的顺序输出。现在,给定两个单词的倒排链数组 ab,请你帮助小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]

02思路

用两个指针,分别指向两个数组的第一个元素,向右移动求交集,之后将交集逆序

可以直接用Python集合的交集

03代码

def solution(a, b):
    # write code here
    intersection = set(a).intersection(set(b))
    # print(intersection)
    # print(list(intersection)[::-1])
    return sorted(list(intersection), reverse=True)
  • sorted()返回一个新的已排序列表,不会修改原列表。sort()无返回值,直接对原列表进行排序。
  • 默认reverse=False,正序排列