大数据的left_join

刷算法题:

第一遍:1.看5分钟,没思路看题解

2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。

3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法)

4.整理到自己的自媒体平台。

5.再刷重复的类似的题目,根据时间和任务安排刷哪几个板块

6.用c++语言 都刷过一遍了 就刷中等

一.题目

用c++写一个函数,内存有限,给了两个表格,怎么实现left join?(滑动窗口法)两个表都无法直接加载到内存里 ,并且给出两个二维vector代表文件即可

二、反思

1.自己的解法

#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>// 定义一行数据类型
using Row = std::vector<std::string>;// 滑动窗口方式实现 LEFT JOIN
std::vector<Row> leftJoin(const std::vector<Row>& table1, const std::vector<Row>& table2, size_t joinCol1, size_t joinCol2, size_t chunkSize) {std::vector<Row> result; // 存储最终的结果size_t table1Size = table1.size();size_t table2Size = table2.size();for (size_t i = 0; i < table1Size; i += chunkSize) {size_t end = std::min(i + chunkSize, table1Size);// 将当前窗口的数据加载到内存中std::vector<Row> table1Chunk(table1.begin() + i, table1.begin() + end);// 构建右表的哈希索引std::unordered_multimap<std::string, Row> table2Map;for (const auto& row : table2) {if (joinCol2 < row.size()) {table2Map.emplace(row[joinCol2], row);}}// 对当前窗口的左表进行匹配for (const auto& row1 : table1Chunk) {bool matched = false;if (joinCol1 < row1.size()) {auto range = table2Map.equal_range(row1[joinCol1]);for (auto it = range.first; it != range.second; ++it) {Row joinedRow = row1; // 复制左表当前行joinedRow.insert(joinedRow.end(), it->second.begin(), it->second.end());result.push_back(joinedRow);matched = true;}}// 如果没有匹配项,则补空if (!matched) {Row joinedRow = row1;joinedRow.resize(row1.size() + table2[0].size(), "NULL");result.push_back(joinedRow);}}}return result;
}int main() {// 示例表格1(左表)std::vector<Row> table1 = {{"1", "Alice"},{"2", "Bob"},{"3", "Charlie"}};// 示例表格2(右表)std::vector<Row> table2 = {{"1", "New York"},{"2", "Los Angeles"}};// 左表的连接列和右表的连接列索引size_t joinCol1 = 0;size_t joinCol2 = 0;// 设置块大小size_t chunkSize = 2;// 执行 LEFT JOINauto result = leftJoin(table1, table2, joinCol1, joinCol2, chunkSize);// 输出结果for (const auto& row : result) {for (const auto& col : row) {std::cout << col << "\t";}std::cout << "\n";}return 0;
}

2.题目的解法 

2

 3.思路的异同

三.进步的地方

 面试的时候遇到的,根本做不出来,忘记multimap这个数据结构了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务即时通讯系统的实现(客户端)----(2)

目录 1. 将protobuf引入项目当中2. 前后端交互接口定义2.1 核心PB类2.2 HTTP接口定义2.3 websocket接口定义 3. 核心数据结构和PB之间的转换4. 设计数据中心DataCenter类5. 网络通信5.1 定义NetClient类5.2 引入HTTP5.3 引入websocket 6. 小结7. 搭建测试服务器7.1 创建项目7.2…

凸函数与深度学习调参

问题1&#xff1a;如何区分凸问题和凹问题&#xff1f; 问题2&#xff1a;深度学习如何区分调参&#xff1f;

使用可视化工具kafkatool连接docker的kafka集群,查看消息内容和offset

1、下载kafkatool 下载地址Offset Explorer&#xff0c;下载对应系统的offset explorer 下载完&#xff0c;傻瓜安装即可&#xff08;建议放D盘&#xff09;&#xff0c;在开始菜单输入offset找到该应用打开 打开 2、连接kafka 点击File > add new connection Bootstrap…

关于Java使用ueditor上传图片的一些总结

1.如何配置ueditor让上传的图片到项目之外&#xff1f; 因为图片上传到web项目中,重新部署项目可能会丢失图片。 解决方法&#xff1a;下载ueditor.1.1.2.jar. 地址&#xff1a;ueditor-1.1.2项目源码及jar包.zip 链接: https://pan.baidu.com/s/1Bhumfw8OX16n0MTO9ur73g 提…

React可以做全栈开发吗

React可以做全栈开发吗? 答案是肯定的&#xff0c;而且还比较完美 React可以用于全栈开发&#xff0c;以下是具体的介绍&#xff1a; 前端部分 构建用户界面 React是一个用于构建用户界面的JavaScript库&#xff0c;它通过组件化的方式让开发者能够高效地创建交互式的UI。例…

【前端学习笔记】Javascript学习二(运算符、数组、函数)

一、运算符 运算符&#xff08;operator&#xff09;也被称为操作符&#xff0c;是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有&#xff1a; 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 算数运算符&#xff1a; 、-…

Redis五大基本类型——List列表命令详解(命令用法详解+思维导图详解)

目录 一、List列表类型介绍 二、常见命令 1、LPUSH 2、LPUSHX 3、RPUSH 4、RPUSHX 5、LRANGE 6、LPOP 7、RPOP 8、LREM 9、LSET 10、LINDEX 11、LINSERT 12、LLEN 13、阻塞版本命令 BLPOP BRPOP 三、命令小结 相关内容&#xff1a; Redis五大基本类型——Ha…

快速入门消息队列MQ、RabbitMQ

目录 一、MQ简介 1.同步调用 2.异步调用 3.技术选型 二、RabbitMQ 1.安装 2.控制台的使用说明 2.1交换机 2.2队列​编辑 2.3绑定关系 3.AMQP 3.1快速入门 3.2WorkQueues模型 3.3交换机 3.3.1 Fanout交换机 3.3.2 Direct交换机 3.3.3 Topic交换机 3.4 声明交换机…

Spark SQL大数据分析快速上手-完全分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…

《现代网络技术》读书笔记:NFV功能

本文部分内容来源于《现代网络技术&#xff1a;SDN,NFV,QoE、物联网和云计算&#xff1a;SDN,NFV,QoE,IoT,andcloud》 NFV基础设施 NFV体系结构的核心是资源与功能集合&#xff0c;也为称为NFV基础设施(NFVI)。NFVI包括以下三个域&#xff1a; 计算域&#xff1a;提供商用的大…

MySQL数据库2——SQL语句

一.SQL基础 1.SQL通用语法 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾。2.SOL语句可以使用空格/缩进来增强语句的可读性。3.MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写 注释&#xff1a; 单行注释&#xff1a;-- 注释内容或#注释内容(MySQL…

会员等级经验问题

问题描述 会员从一级完成任务升级到二级以后&#xff0c;一级显示还差经验&#xff0c;这里差的其实是二级到三级的经验&#xff0c;如下图所示 修复方法 1、前端需要修改&#xff1a; 路径&#xff1a;/pages/users/user_vip/index.vue 方便复制&#xff1a; v-if"i…

【Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon &#xff08;表&#xff09;过期数据可以释放存储空间&#xff0c;优化资源利用并提升系统运行效…

Spring Boot整合Kafka,实现单条消费和批量消费,示例教程

如何安装Kafka&#xff0c;可以参考docker搭载Kafka集群&#xff0c;一个文件搞定&#xff0c;超简单&#xff0c;亲试可行-CSDN博客 1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…

django基于Python的农产品销售系统的设计与实现

摘 要 随着现代人们的快速发展&#xff0c;农产品销售系统已成为农产品的需求。该平台采用Python技术和django搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff1b;通过个人中心、用户管理、商家管理、产品类型管理、农产品管理、系统管理、订单管理等功能&a…

项目-摄像

树莓派摄像头使用方法 Camera教程 https://www.raspi.cc/index.php?cread&id53&page1 nanopc-t4 ​https://www.raspi.cc/index.php?cread&id53&page1 摄像头型号 Raspberry Pi Camera Rev 1.3 检测故障 dmesg | grep -i mipi piNanoPC-T4:~$ dmesg | …

Facebook商城号封号的原因是什么?

Facebook商城作为一个重要的销售平台&#xff0c;不仅为商家提供了巨大的市场机会&#xff0c;也带来了一系列需要警惕的风险&#xff0c;其中包括账号被封的风险。本文将从环境异常、频繁操作和违规行为三个主要方面深入探讨&#xff0c;解析导致Facebook商城账号被封禁的具体…

聊一聊Elasticsearch的索引分片的恢复机制

1、什么是索引分片的恢复&#xff1f; 所谓索引分片的恢复指的是在某些条件下&#xff0c;索引分片丢失&#xff0c;ES会把某索引的分片复制一份来得到该分片副本的过程。 2、触发分片恢复的场景有哪些&#xff1f; 分片的分配 当集群中节点的数量发生变化&#xff0c;或者配…

字符串的基本操作(C语言版)

一、实验内容&#xff1a; 采用顺序结构存储串&#xff0c;编写一个函数substring(strl,str2)&#xff0c;用于判定str2是否为strl的子串&#xff1b;编写一个函数&#xff0c;实现在两个已知字符串中找出所有非空最长公共子串的长度和最长公共子串的个数&#xff1b; ①字符…

一些任务调度的概念杂谈

任务调度 1.什么是调度任务 依赖&#xff1a;依赖管理是整个DAG调度的核心。调度依赖包括依赖策略和依赖区间。 依赖分为任务依赖和作业依赖&#xff0c;任务依赖是DAG任务本身的依赖关系&#xff0c;作业依赖是根据任务依赖每天的作业产生的。两者在数据存储模型上有所不同…