字节青训-小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 的交集,并将结果按从大到小的顺序返回。

数据结构选择

  • 由于 a 和 b 是有序数组,我们可以利用双指针法来高效地找到交集。
  • 交集的结果需要按从大到小的顺序排列,因此我们可以使用一个 vector 来存储结果,并在最后反转这个 vector

算法步骤

  1. 初始化双指针:分别指向数组 a 和 b 的开始位置。
  2. 遍历数组
    • 如果 a[i] 等于 b[j],则将这个值加入结果集,并移动两个指针。
    • 如果 a[i] 小于 b[j],则移动 a 的指针。
    • 如果 a[i] 大于 b[j],则移动 b 的指针。
  3. 反转结果集:由于我们需要从大到小的顺序,最后反转结果集。

最终代码(C++):

今天终于把c++的判题系统放上去了,后面终于不需要转python了

#include <bits/stdc++.h>
#include <vector>
using namespace std;vector<int> solution(vector<int>& a, vector<int>& b) {vector<int> result;int i = 0, j = 0;// 双指针遍历while (i < a.size() && j < b.size()) {if (a[i] == b[j]) {result.push_back(a[i]);i++;j++;} else if (a[i] < b[j]) {i++;} else {j++;}}reverse(result.begin(), result.end());return result;
}int main() {vector<int> a1 = {1, 2, 3, 7};vector<int> b1 = {2, 5, 7};vector<int> res1 = solution(a1, b1);cout << (res1 == vector<int>{7, 2}) << endl;vector<int> a2 = {1, 4, 8, 10};vector<int> b2 = {2, 4, 8, 10};vector<int> res2 = solution(a2, b2);cout << (res2 == vector<int>{10, 8, 4}) << endl;vector<int> a3 = {3, 5, 9};vector<int> b3 = {1, 4, 6};vector<int> res3 = solution(a3, b3);cout << (res3 == vector<int>{}) << endl;vector<int> a4 = {1, 2, 3};vector<int> b4 = {1, 2, 3};vector<int> res4 = solution(a4, b4);cout << (res4 == vector<int>{3, 2, 1}) << endl;return 0;
}

 运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6227.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024 CSS - 基础保姆级教程系列一

CSS盒子模型 <style>.box {width: 200px;height: 100px;padding: 20px;} </style> <div class"box">盒子模型 </div><style>.box {width: 200px;height: 100px;padding: 20px;box-sizing: border-box;} </style> <div class&…

道品科技水肥一体化如何确定灌溉需水量呢?

在农业生产进程之中&#xff0c;持续攀升的生产成本&#xff0c;使农民苦不堪言。其一&#xff0c;水肥用量递增&#xff0c;致使成本上扬&#xff1b;其二&#xff0c;种植成效并不显著&#xff0c;所增经济收益颇为有限。另外&#xff0c;不科学的滴灌施肥亦破坏了农业环境架…

北航软件工程考研难度分析!

C哥专业提供——计软考研院校选择分析专业课备考指南规划 总体情况概述 北航软件工程学硕2024届呈现"稳中有降"态势。2024届复试线335分&#xff0c;较2023届上升25分&#xff0c;但较2022届下降10分。实际录取24人&#xff08;含实验室方向&#xff09;&#xff0c…

网页,app,微信小程序互相跳转

1.网页打开小程序 配置&#xff1a;登录小程序账号&#xff0c;找到账号设置&#xff0c;在基本设置中找到隐私与安全 在明文scheme中点击配置&#xff0c;填写要跳转的小程序页面地址即可 此处只展示一种实现方法&#xff0c;其他参照获取 URL Scheme | 微信开放文档 <a …

SQL,力扣题目1767,寻找没有被执行的任务对【递归】

一、力扣链接 LeetCode_1767 二、题目描述 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

【工具】在线一维码生成器

在国外网站上看到一款条形码生成器&#xff0c;它是开源的&#xff0c;很好用。但是访问慢&#xff0c;也不支持下载一维码&#xff0c; 于是我把他翻译了过来&#xff0c;加上下载条码功能&#xff0c;再加了配色&#xff0c;让界面看上来更丰富 一个可直接使用的工具&#x…

PHM技术应用:发电机线棒高温预警

目录 1 案例背景 1.1 事件描述 1.2 设备概况 1.3 事件过程 2 系统动力学模型 典型工况 故障树 潜在业务提升 3 异常预警规则模型 4 故障排查逻辑 5 小结 1 案例背景 1.1 事件描述 某发电厂的某台发电机组&#xff0c;在满功率工况下&#xff0c;因发电机下层线棒温…

Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践

Spark 的介绍与搭建&#xff1a;从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 目录 一、Spark on YARN 的优势 &#xff08;一&#…

是时候用开源降低AI落地门槛了

过去三十多年&#xff0c;从Linux到KVM&#xff0c;从OpenStack到Kubernetes&#xff0c;IT领域众多关键技术都来自开源。开源技术不仅大幅降低了IT成本&#xff0c;也降低了企业技术创新的门槛。 那么&#xff0c;在生成式AI时代&#xff0c;开源能够为AI带来什么&#xff1f;…

机器学习—矩阵乘法的规则

有一个23的矩阵A&#xff0c;有两行三列&#xff0c;把这个矩阵的列想象成三个向量a1,a2,a3&#xff0c;用一个转置&#xff0c;把它相乘&#xff0c;首先&#xff0c;什么是转置&#xff0c;把一个矩阵进行行变列&#xff0c;列变行的操作&#xff0c;所以这些行现在是一个转置…

字节面试Java基础部分——HashMap

字节面试Java基础部分 面试管&#xff1a;Java应该很熟悉吧&#xff0c;接下来问你几个Java基础问题&#xff1a; HashMap 是什么样的数据结构 JDK 7 中&#xff0c;HashMap 由“数组链表”组成&#xff0c;数组是 HashMap 的主体&#xff0c;链表则是主要为了解决哈希冲突而…

Rust 力扣 - 2461. 长度为 K 子数组中的最大和

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;用一个哈希表记录窗口内的所有元素&#xff08;用来对窗口内元素去重&#xff09;&#xff0c;我们取哈希表中元素数量等于k的窗口总和的最大值 题解代码 use std::collecti…

《AI在企业战略中的关键地位:以微软和阿里为例》

内容概要 在当今商业环境中&#xff0c;人工智能&#xff08;AI&#xff09;的影响力如滔滔洪水&#xff0c;愈演愈烈。文章将揭示AI在企业战略中的崛起&#xff0c;尤其以微软和阿里巴巴为代表的企业&#xff0c;这两家科技巨头通过不同方式&#xff0c;将智能技术融入其核心…

线上lgb使用

1. 单机版模型 转 spark集群 打分 速度超快&#xff0c;十亿数据&#xff0c;十多分钟&#xff01;&#xff01;&#xff01; 1.1 主函数-主要获取模型路径 # codingutf-8 import pyspark.sql.functions as F from pyspark.sql import SparkSession from pyspark.sql.types …

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中&#xff0c;Pinia已被内置&#xff0c;无需额外安装即可直接使用&#xff08;Vue2版本则内置了Vuex&#xff09;。 HBuilder X项目&#xff1a;直接使用&#xff0c;无需安装。CLI项目&#xff1a;需手动安装&#xff0c;执行yarn add pinia…

JVM基础

JRE&#xff1a;运行java字节码的环境。它是运行已编译java程序所需要的所有内容的集合&#xff0c;主要包括java虚拟机JVM和java基础类库&#xff08;class library&#xff09; JVM&#xff1a;是Java Virtual Machine的缩写&#xff0c;即Java虚拟机。‌它是一个虚构的计算…

vm虚拟机中添加网卡却在network-scripts文件找不到,解决方法

前言 进入network-scripts文件发现只有eth0网卡 ifconfig发现添加进去了 解决方法 nmcli d s #查看目前服务器中所有网卡 手动启用该接口 nmcli d connect eth1 重启网卡 systemctl restart network 解决问题

keepalive+mysql8双主

1.概述 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;我们必须保证两台Mysql数据库的数据完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库…

论文阅读(一种基于球面投影和特征提取的岩石点云快速配准算法)

目前存在的问题&#xff1a; 在图像配准研究方面比点云配准更早、更有发展。相对之下&#xff0c;点云配准方法不成熟&#xff0c;将图像配准的思想与ICP相结合。 文章主要研究内容&#xff1a; 单站扫描仪的点云数据通过球极坐标转换为数字图像提取图像特征并去除边缘点&#…

人脸检测之MTCNN算法网络结构

MTCNN&#xff08;Multi-task Cascaded Convolutional Networks&#xff09;是一种用于人脸检测和关键点检测的深度学习模型&#xff0c;特别适合在复杂背景下识别出多尺度的人脸。它通过多任务学习来实现人脸检测和人脸关键点定位&#xff08;如眼睛、鼻子、嘴巴的位置&#x…