`
moxiaomomo
  • 浏览: 45682 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何快速找出两个队列中相同的元素,假设队列的长度非常大

阅读更多
之前面试腾讯时,遇到一道面试题。
题目大概是假设有海量的QQ会员参加了活动A,也有海量的QQ会员参加了活动B,如何快速找出既参加了活动A,又参加了活动B的QQ会员?

当时回答时答得乱七八糟的,哎...

我暂时想到的方法是先将两个队列变为有序队列,然后分别从两个队列的头部开始迭代:

如果两个队列的当前元素大小相等,则两个队列的遍历下标分别前移1;否则将指向较小元素的下标前移1,另一个下标不变。

这样遍历一直到其中一个队列已经完全遍历为止。这时便能找出所有相同的元素。

算法一直是自己短板。暂时想不出更好的办法,要是不用排序就好了。  
0
3
分享到:
评论
3 楼 moxiaomomo 2011-05-03  
用hash表找吧,把第一个活动的会员用QQ号生成hashcode,放入Hash表中,
对于第二个列表遍历一次,每个去那个hash表中是否有值。
所要花费的时间为,第一个活动列表一次hash计算过程。
第二个活动列表的hash计算过程。
BootsLee.NewBegin 写道
用hash表找吧,把第一个活动的会员用QQ号生成hashcode,放入Hash表中,
对于第二个列表遍历一次,每个去那个hash表中是否有值。
所要花费的时间为,第一个活动列表一次hash计算过程。
第二个活动列表的hash计算过程。

恩恩,有道理~~但如果是海量数据的话,在控制hash碰撞的概率方面会不会有点麻烦?
2 楼 BootsLee.NewBegin 2011-04-27  
用hash表找吧,把第一个活动的会员用QQ号生成hashcode,放入Hash表中,
对于第二个列表遍历一次,每个去那个hash表中是否有值。
所要花费的时间为,第一个活动列表一次hash计算过程。
第二个活动列表的hash计算过程。
1 楼 234390216 2011-04-27  
既然有记录的,那么表里面应该会有记录的,可以利用表连接来做吧!

相关推荐

    数据结构与算法教学大纲程序代码

    五:内容:1、若X和Y是用结点大小为1的单链表表示的串,设计算法找出X中第一个不在Y中出现的字符。 2、设计一算法,在顺序串上实现串的比较运算strcmp(S,T)。 3、若S和T是用结点大小为1的单链表存储的两个串,设计...

    求一个数组最小的两个数的下标

    首先,我们要明确问题的要求:给定一个未排序的整数数组,我们需要找出其中最小的两个数,并返回它们在数组中的下标。这里假设数组中至少有两个不同的元素,且不考虑重复元素的情况。如果数组只有一个元素或所有元素...

    迷宫问题 假设迷宫由m行n列构成,有一个入口和一个出口,入口坐标为(1,1),出口坐标为(m,n),试找出一条从入口通往出口的最短路径。设计算法并编程输出一条通过迷宫的最短路径或报告一个“无法通过”的信息。

    - 定义一个栈 ADT Stack,包括初始化、获取栈长度、判断是否为空、获取栈顶元素、压栈和弹栈等操作。 - 设计主程序模块,包括初始化、接收命令、显示结果。 - 实现栈单元模块,具体实现栈的ADT。 - 设计迷宫数组...

    优先队列与分支限界算法

    回溯法的目标通常是寻找所有可能的解,而分支限界法则侧重于找到一个满足特定条件的解或者在所有可能的解中找出最优解。 **搜索方式的不同**:回溯法通常采用深度优先搜索(DFS)策略遍历整个解空间,而分支限界...

    《数据结构》实验

    内容:1、若X和Y是用结点大小为1的单链表表示的串,设计算法找出X中第一个不在Y中出现的字符。 2、设计一算法,在顺序串上实现串的比较运算strcmp(S,T)。 3、若S和T是用结点大小为1的单链表存储的两个串,设计算法将...

    哈夫曼树的构造算法.doc

    4. 循环合并:在每次合并后,需要更新优先队列的状态,即重新找出当前队列中权重最小的两个节点。这通常通过遍历队列(数组)来完成。在循环中,`i`表示当前处理的节点数,`j`遍历队列中的所有节点,寻找未被父节点...

    数据结构课程随堂考试(一).docx

    当从队列中出队列一个数据元素,再入队列两个数据元素之后,rear和front的值分别为3和0。这是因为循环队列的rear指针和front指针会因队列的出队和入队操作而变化。 知识点三:二维数组的存储 在一个二维数组A中,...

    21春北京理工大学《数据结构与算法》在线作业参考答案.docx

    对于7000个无序元素,如果只需要找出前5个最大的元素,使用堆排序会比其他排序方法更快。 - 堆排序的时间复杂度为O(nlogn),但在特定情况下(如仅需找到前k个最大/最小元素),通过构建一个大小为k的小顶堆或大顶堆...

    java程序(一)

    这里首先使用`split(",")`方法将字符串分割成数组,然后通过比较两个数组中对应位置的元素来找出不同之处。这种方法假设字符串是以逗号分隔的整数列表,并且两个字符串的长度可能不同,因此根据较短的字符串长度来...

    北京邮电大学09机试复试题

    题目要求找出序列`a`中小于序列`b`中每个元素的数的个数,并按顺序输出结果。例如,如果`N1=5`且`N2=3`,那么输出应为`2 3 4`,表示在序列`a`中,小于序列`b`的第一个元素(假设为`b[0]`)的元素有2个,小于第二个...

    美国硅谷城镇地图——最短路径问题

    在编程实现中,可以使用数据结构如**二叉堆** 或者 **优先级队列(Priority Queue)** 来优化Dijkstra算法,确保每次都能快速地获取路径长度最小的节点。`最短路径——.cpp` 文件很可能是实现这个算法的C++代码,而`...

    计算机二级公共基础知识

    在某些应用中,对线性链表中的每个结点设置两个指针,一个称为左指针,用以指向其前件结点;另一个称为右指针,用以指向其后件结点。这样的表称为双向链表。 在线性链表中,各数据元素结点的存储空间可以是不连续的...

    合工大2000年《数据结构》考研真题.pdf

    - 选择排序:每次从未排序的部分找出最小(或最大)元素放到已排序序列的末尾。 - 插入排序:将未排序的数据逐个插入到已排序序列中适当的位置。 4. **二叉树的相关概念**: - 二叉排序树(二叉搜索树):每个...

    Dijkstra.rar

    3. 社交网络:在社交网络分析中,Dijkstra算法可以帮助找出两个用户之间的最短关系链。 4. 无线传感器网络:在无线传感器网络中,Dijkstra算法可以用于构建能量有效的多跳通信路径。 五、优化与扩展 尽管Dijkstra...

    最短路径算法java

    这个Java实现中,`graph.getNodes()`返回图中的所有节点,`edgeWeight(Node from, Node to)`计算两个节点之间的边权。注意,这个实现假设图是有向且边权重非负。 通过分析和实现Dijkstra算法,我们可以高效地找出图...

    c语言编程比赛的题目及答案

    给出这n个数(从左往右),假设游戏者都是非常聪明的,问最后两个人的得分(假设第一个人首先取数)。 输入格式:输入格式:第一行为n(2),第二行为n个数,每个数字之间均用空格隔开。 输出格式:输出为两个游戏者...

    数据结构(C++)有关练习题

    D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。 E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余...

Global site tag (gtag.js) - Google Analytics