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

84 阅读2分钟

问题描述

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

问题理解

你需要找出两个列表 a 和 b 中共同的元素,并将这些元素按从大到小的顺序返回。

数据结构选择

  • 集合(Set) :集合可以快速进行交集操作,并且去重。
  • 列表(List) :用于存储最终的结果,并进行排序。

算法步骤

  1. 将列表转换为集合:这样可以利用集合的交集操作快速找出共同的元素。
  2. 找出交集:使用集合的交集操作 & 找出两个集合中共同的元素。
  3. 排序:将交集的结果转换为列表,并按从大到小的顺序排序。

思路提示

  1. 集合转换:将列表 a 和 b 转换为集合 set_a 和 set_b
  2. 交集操作:使用 set_a & set_b 找出两个集合的交集。
  3. 排序:将交集的结果转换为列表,并使用 sorted 函数按从大到小的顺序排序。

伪代码

  1. 将列表 a 转换为集合 set_a
  2. 将列表 b 转换为集合 set_b
  3. 找出 set_a 和 set_b 的交集 intersection
  4. 将 intersection 转换为列表并按从大到小的顺序排序
  5. 返回排序后的结果

代码框架

def solution(a, b): # 将列表转换为集合 set_a = set(a) set_b = set(b)

# 找出交集
intersection = set_a & set_b

# 将交集转换为列表并按从大到小的顺序排序
result = sorted(intersection, reverse=True)

return result

代码

def solution(a, b):
    # 将列表转换为集合
    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])