在两个有序链表中查找第K大元素。
这是一次面试的时候,别人问我的,当时回答的不太好。
题目描述:
即在两个有序链表中查找第k大的元素,相等的元素做一个元素处理。
{1,3,5}, {2,4,6},这是简单的情况,查找第2大的元素则是 2。
{1,3, 3,3, 5},{2,3,3,4,6},稍微复杂,查找第3大元素则是3,第4大元素 则是4.
解答:
其实我们可以借鉴合并有序链表的方法来解决这个问题。
算法实现如下:
struct node{ int data; node* next; }; typedef node* List; int findKthElement(List &list1, List &list2, int k) { List pList1 = list1; List pList2 = list2; List pCurNode = NULL; int count = 0; while(pList1 && pList2) { if (pList1->data < pList2->data) { pCurNode = pList1; pList1 = pList1->next; count++; } else if (pList1->data > pList2->data) { pCurNode = pList2; pList2 = pList2->next; count++; } else { count++; pCurNode = pList1; int temp = pList1->data; List p = pList1->next; while(p) { if (p->data != temp) { pList1 = p; break; } p = p->next; } p = pList2->next; while(p) { if (p->data != temp) { pList2 = p; } p = p->next; } } if (count == k) { return pCurNode->data; } } if (pList1 == NULL && pList2 == NULL) { return -1; } List rest = (pList1 != NULL) ? pList1 : pList2; while(rest) { count++; if (count == k) { return rest->data; } rest = rest->next; } return -1; }
在两个有序链表中查找第K大元素。相关推荐
- 网易_在数组中查找前K个元素
笔试题,最后一题 查找网易云音乐中播放量最大的前K个歌曲. 换句话说,就是在数组中查找前K大元素. 大致有以下几个思路. 1.第一感觉就是对数组进行降序全排序,然后返回前K个元素,即是需要的K个最大数 ...
- 【算法】在N个乱序数字中查找第K大的数字
目录 1. 结论 2. 经典的几种解法 2.1 解法一:O(n*k) 2.2 解法二:O(n*logk) 2.3 解法三:O(n) 2.4 解法四:O(n*logn+k) 2.5 解法五:O(n*lo ...
- 在N个数中查找第K大的数字(Top K问题)
在N个乱序数字中查找第k大的数字,时间复杂度可以减小至 O(N*logN) O(N) O(1) O(2) 答案:B 所谓"第(前)k大数问题"指的是在长度为n(n>=k)的乱 ...
- 在N个乱序数字中查找第k大的数字
在N个乱序数字中查找第k大的数字 在N个乱序数字中查找第k大的数字,时间复杂度可以减小至 O(N*logN) O(N) O(1) O(2) 答案:B 所谓"第(前)k大数问题"指的 ...
- 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
算法对比: 算法 时间复杂度 适合场景 冒泡排序.插入排序.选择排序 O(n2) 小规模数据 归并排序.快速排序 O(nlogn) 大规模数据 归并排序和快速排序都用到了分治思想,非常巧妙.我们可以借 ...
- 【算法】快速选择算法 ( 数组中找第 K 大元素 )
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
- 如何寻找无序数组中的第K大元素?
如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...
- 数组中的第K大元素问题(C++)
数组中的第K大元素问题 问题: 在未排序的数组中找到第 k 个最大的元素.请注意,需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 约定: 假设这里数组的长度为 n. 方法一: ...
- 从C语言的角度重构数据结构系列(七)-数据结构堆知识求解数据流中的第K大元素
前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...
最新文章
- NVIDIA深度学习Tensor Core性能解析(下)
- Ubuntu 12.04下玩转终端管理器Byobu
- Python的输入指令、格式化输出、基本运算符
- 运行npm install命令的时候会发生什么?
- 函数自执行-一元运算符
- Linq 常用方法解释
- Spring 事务的那些坑,都在这里了!
- 安装conntrack-tools
- 2021最新Java零基础自学教程,java从入门到精通
- DSA数字签名含C语言实例
- 放大电路静态工作点的稳定
- js实现鼠标放在div 悬浮显示另一个div内容链接 (不占位置)
- 【毕业设计】 微信小程序购物商城系统 【含代码】
- “80后”国家杰青,任太原理工大学副校长!
- 习题2-2 阶梯电价
- 【Java】接口长URL转成短连接的实现(代码案例实操)
- 计算机首饰设计本科考试,珠宝首饰设计师考证条件及考试大纲.doc
- 怎样用计算机打出Abc,49.智能ABC输入秘籍四招:
- (11) 修改ueditor 插入代码时的样式
- ZMQ通信模型及基本服务实现