当前位置: 首页 > article >正文

青训5_1112_01 小S的倒排索引(内置方法 set(a) set(b) 及sorted 排序)

青训5_1112_01 小S的倒排索引.md

文章目录

  • 青训5_1112_01 小S的倒排索引.md
    • 问题描述
      • 测试样例
      • 示例
    • 思路
      • 答案1 内置方法 set(a)& set(b) 及sorted 排序
      • 方法2 不用内置方法,首席排序和共同数字集合

问题描述

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

测试样例

样例7:
输入: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]

示例

def solution(a, b):
    # write code here
    return []

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])

思路

找到两个数据中的相同数字、同时从大到小排序为数组

答案1 内置方法 set(a)& set(b) 及sorted 排序

def solution(a, b):
    # 将两个列表转换为集合并求交集
    common = set(a) & set(b)
    # 将交集转换为列表并降序排序
    return sorted(list(common), reverse=True)

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])

方法2 不用内置方法,首席排序和共同数字集合

def solution(a, b):
    # 用于存储结果的列表
    result = []
    
    # 获取数组长度
    len_a = len(a)
    len_b = len(b)
    
    # 初始化两个指针,分别指向a和b的起始位置
    i = 0
    j = 0
    
    # 当两个指针都未到达数组末尾时继续
    while i < len_a and j < len_b:
        if a[i] == b[j]:  # 找到相同元素
            result.append(a[i])
            i += 1
            j += 1
        elif a[i] < b[j]:  # a中的元素较小,移动a的指针
            i += 1
        else:  # b中的元素较小,移动b的指针
            j += 1
    
    # 将结果反转,实现从大到小排序
    left = 0
    right = len(result) - 1
    while left < right:
        result[left], result[right] = result[right], result[left]
        left += 1
        right -= 1
        
    return result

http://www.kler.cn/a/390238.html

相关文章:

  • Ollama的安装以及大模型下载教程
  • 单元测试、集成测试、系统测试有什么区别
  • 【Spring】@Autowired与@Resource的区别
  • 3.5【数据库系统】ER图
  • 少儿学习Scratch编程的好处和坏处
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • pytorch detach方法介绍
  • 最新发布“秒哒”,李彦宏:一个只靠想法就能赚钱的时代来了
  • 使用HTML、CSS和JavaScript创建动态雪人和雪花效果
  • 华为OD机试 - 垃圾信息拦截(Python/JS/C/C++ 2024 C卷 100分)
  • Maven 项目模板
  • 探索Python图像处理的奥秘:Pillow库的全面指南
  • 请简述Vue与React的区别
  • 【Linux】进程信号全攻略(一)
  • 云上盛宴-腾讯云双11活动玩法攻略
  • 【Linux探索学习】第十一弹——初识操作系统:冯诺依曼体系结构与操作系统的概念与定位
  • 开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案
  • Lua进阶用法之Lua和C的接口设计
  • uniapp实现H5和微信小程序获取当前位置(腾讯地图)
  • 确定图像的熵和各向异性 Halcon entropy_gray 解析
  • Spring资源加载模块,原来XML就这,活该被注解踩在脚下 手写Spring第六篇了
  • 【vue】封装一个可随时暂停启动无需担心副作用的定时器
  • AI - 人工智能;Open WebUI;Lobe Chat;Ollama
  • git clone相关问题和bug记录
  • 本地保存mysql凭据实现免密登录mysql
  • Ubuntu 18.04 安装Fast-planner