在两个有序链表中查找第K大元素

#include <iostream>
using namespace std;
#define LENGTH1 6
#define LENGTH2 10


typedef struct node{
int data;
node* next;
} *List;
//typedef node* List;
List mergeList(List &list1,List &list2)
{
List list,temp;
List tempList=new node;
list=tempList;
List pList1 = list1;
List pList2 = list2;
List pCurNode = NULL;
while(pList1 && pList2)
{
if (pList1->data <= pList2->data)
{
pCurNode = pList1;
pList1 = pList1->next;

}
else if (pList1->data > pList2->data)
{
pCurNode = pList2;
pList2 = pList2->next;

}
tempList->data=pCurNode->data;
temp=tempList;
tempList->next=new node;
tempList=tempList->next;
}
tempList=temp;
if (pList1 == NULL && pList2 == NULL)
{
tempList->next=NULL;
return list;
}
List rest = (pList1 != NULL) ? pList1 : pList2;
tempList->next=rest;
return list;

}
//若第K大的值存在则返回第K大的值,否则返回-1;
int findK(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;
int temp = pList1->data;
pList1= pList1->next;
while(pList1)
{
if (pList1->data != temp)
{
break;
}
pList1= pList1->next;
}
count++;
}
else if (pList1->data > pList2->data)
{
pCurNode = pList2;
int temp = pList2->data;
pList2= pList2->next;
while(pList2)
{
if (pList2->data != temp)
{
break;
}
pList2= pList2->next;
}
count++;
}
else///相等的时候不计算count值;
{
pCurNode = pList1;
pList1=pList1->next;
}
if (count == k)
{
return pCurNode->data;
}
}

List rest = (pList1 != NULL) ? pList1 : pList2;
while(rest)
{
count++;
if (count == k)
{
return rest->data;
}
int temp = rest->data;
rest= rest->next;
while(rest)
{
if (rest->data != temp)
{
break;
}
rest = rest->next;
}
}
return -1;
}
void display(List &list)
{
List tempList=list;
int cnt=0;
while(tempList)
{
if(cnt==0)
cout<<tempList->data;
else
cout<<","<<tempList->data;
tempList=tempList->next;
cnt++;
}
cout<<endl;
}
void main()
{
int a[LENGTH1]={1,2,3,3,3,5};
int b[LENGTH2]={2,3,3,4,6,7,7,8,8,9};
List list1,tempList1,list2,tempList2,temp;
int i,j,k=4,kLargest;
list1=tempList1=new node;
list2=tempList2=(List)malloc(sizeof(node));

tempList1->data=a[0];
if(LENGTH1==1)
{
tempList1->next=NULL;
}
for(i=1;i<LENGTH1;i++)
{
tempList1->next=new node;
tempList1=tempList1->next;
tempList1->data=a[i];
tempList1->next=NULL;

}

for(j=0;j<LENGTH2;j++)
{
tempList2->data=b[j];
temp=tempList2;
tempList2->next=(List)malloc(sizeof(node));
tempList2=tempList2->next;
}
temp->next=NULL;


List list=mergeList(list1,list2);
cout<<"list1:";
display(list1);
cout<<"list2:";
display(list2);
cout<<"list:";
display(list);
cout<<"请输入K值:";
cin>>k;
kLargest=findK(list1, list2, k);
cout<<"第"<<k<<"大的值为:"<<kLargest<<endl;
}
【leetcode 和 c++】 合并两个有序链表, 以及其升级题型合并K个有序链表(和数组并找中位数) 24.03.01 listnode 要挂 #include 头文件while循环,保证两个输入链表的不为空进入对其中一种为空的情况做处理(都为空,返回新建链表也没问题,所以不用处理)返回的时候要记得跳过虚拟头节点。NULL最好都改成nullptr这里 p2前面一定要有 星号,否则它就不是指针了1、用lists.empty() 的返回值就可以判断lists=[] 和 lists= [[]] ,这两种情况了(是的,我最开始用的是sizeof判断非零,甚至还单独写了一个函数判断空,苦笑)2、 阅读详情

相关推荐

如何优雅地实现查找两个有序数组的第k大元素

本文介绍了如何将查找两个有序数组中第k小元素的函数转换为查找第k大元素的函数。核心思路是利用逆序索引,将第k大元素转换为第(m+n-k+1)小元素。通过调整比较逻辑和递归调用参数,实现了在保持O(log(m+n))时间复杂度的前提下,将原函数转换为查找第k大元素的功能。文中提供了具体实现代码和示例,展示了该方法的实用性和灵活性,避免了为不同需求重复编写代码。

2501_90323865的博客 52

在两个有序链表中查找第K大元素。

这是一次面试的时候,别人问我的,当时回答的不太好。 题目描述: 即在两个有序链表中查找第k大的元素,相等的元素做一个元素处理。 {1,3,5}, {2,4,6},这是简单的情况,查找第2大的元素则是 2。 {1,3, 3,3, 5},{2,3,3,4,6},稍微复杂,查找第3大元素则是3,第4大元素 则是4. 解答: 其实我们可以借鉴合并有序链表的方

随风奔跑的专栏 2551

链表查找倒数第K个数

链表功能的一个扩展延伸,查找倒数第K个元素,是某年考研题

牛客题目——链表相加、寻找第K大、数组中只出现一次的两个数字

链表相加、寻找第K大、数组中只出现一次的两个数字

zhangzhang_one的博客 394

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1155

SNN目标识别MNIST

总体来说这篇论文提出的方法用了多种更精密的细节,如LIF膜电位公式,三种STDP方法,但我觉得还可以有很大的改进,比如输入层全连接到兴奋层,兴奋层通过抑制层实现的侧向抑制,抑制层不参与学习等等。尤其是兴奋层通过抑制层实现侧向抑制这里,当神经元兴奋时,通过抑制层再倒回兴奋层,所抑制的已经经过一了一段时间的延迟。如有错误,请不吝赐教。

m0_74982304的博客 1262

两个排序数组中找第k大的数

一、题目描述给定两个已经排序好的数组,找到两者所有元素中第k大的元素二、解法分析解法一:参照归并排序    将两个有序数组变成一个有序数组:merge两个数组,然后求第k大的数,时间复杂度O(m+n)解法二:游标计数    题目只要求第k大的数,没必要花力气将数组全部再排序,可以定义两个游标分别指向两个有序数组,按序移动,并用count计数,当count等于k时,返回两个游标指向的数中最小的那一个...

qiki_糖没味儿的程序媛小屋 1万+

深入解析MSPM0系列Keil开发中‘ti_msp_dl_config.h‘缺失问题的根源与修复

本文深入解析TI MSPM0系列Keil开发中'ti_msp_dl_config.h'文件缺失问题的根源与修复方法。该错误常见于编译时提示file not found,主要因SysConfig工具未正确生成或工程路径配置错误导致。文章提供了从环境检查、手动生成文件到工程配置调整的系统化解决方案,帮助开发者快速解决这一常见KEIL开发难题。

gold的博客 970

链表中第k个节点

方法1:双指针求解:这题要求链表的倒数第k个节点,最简单的方式就是使用两个指针,第一个指针先移动k步,然后第二个指针再从头开始,这个 时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指针即可。 public static <ListNode> ListNode getKthFromEnd(ListNode head, int k){ ListNode first = head; ListNode second = head;

qq_43751200的博客 1066

Arm CCA架构:硬件级机密计算与安全隔离技术解析

机密计算(Confidential Computing)通过硬件级隔离技术构建可信执行环境(TEE),是当前云安全和数据隐私保护的核心方案。Armv9-A引入的CCA架构采用物理地址空间隔离和Granule保护表(GPT)机制,实现4KB颗粒度的内存访问控制。该技术通过标准化的RMI/RSI接口规范,为虚拟化环境和安全敏感应用提供硬件级保护,特别适用于金融交易、医疗数据处理等需要严格隔离的场景。相比传统TEE方案,Arm CCA在隔离等级和动态权限管理方面具有显著优势,其Realm World设计为机密计算

weixin_30905133的博客 565

别再死记硬背公式了!用Multisim仿真软件,5分钟搞懂三极管放大电路的工作原理

本文介绍如何利用Multisim仿真软件快速掌握三极管放大电路的工作原理,避免死记硬背公式。通过动态实验和参数调整,直观理解三极管的工作状态和放大效果,提升学习效率和实践能力。

weixin_30566063的博客 568

将两个链表数据结合在一起,再排序(笔记)

struct st *p1,*p2; p1=head1-&gt;next; p2=head2-&gt;next; tail=head1; while(p1&amp;&amp;p2) { if(p1-&gt;data&lt;p2-&gt;data) { tail-&gt;next=p1; ...

CHEN_ZAN_YU的博客 1241

AI虚拟人物 数字人直播,不用出镜,不用露脸的直播方式(附教程 软件)

我们先来看一组数据,这是我通过蝉妈妈查到的某位虚拟主播的一个带货数据,粉丝还不到 3000 人,每次直播 1 到 4 个小时,30天的总销量达到了1200单,15天,总销售额 2 万,可能相对来说客单价还是比较低,最关键的是才直播了 6 场,如果说他能够一个月直播 20 天,每天花 4个小时去直播,当个副业来做,就可以达到最起码月入 3 万的一个收入水平,我个人觉得是非常的不错的。大家把商品图片放在背景,只要场景设置的不错,场景和产品的关联度高,直播的时候挂上购买链接也会有一定的成交。

. 7万+

算法通关村之堆结构(实战训练)经典问题:理解堆的构造、插入、删除过程,查找数组中第K大的元素、堆排序、合并K个有序链表

一般都是删除堆顶元素,将堆顶元素与二叉树最后一个元素对调,删除堆顶元素后,再依次调整每一层的各子树。:确认插入位置能够保持原二叉树为完全二叉树,再自底向上调整,保证每一层的子树都符合堆结构。堆满后,只有比堆顶元素小的元素,才可以插入堆中;新插入的元素先覆盖堆顶元素后,再调整。:堆是一种数据结构,按照完全二叉树的存储顺序,将数据存储在一个一维数组中。:按照层次将所有元素一次添入二叉树中,再不断调整,最终使其符合堆结构。将数组序列依次插入堆中,每插入一个元素,就调整堆使之符合堆的结构。全部序列入堆完毕后,

m0_62570784的博客 428

Ovito隐藏技巧:用Expression Selection快速提取分子链(附模糊背景配置参数)

本文详细介绍了Ovito软件中Expression Selection功能的隐藏技巧,用于从复杂的分子动力学模拟数据中快速、精准地提取目标分子链。通过结合Expand Selection和Invert Selection等修饰器,形成一套高效的工作流,并深入解析了实现SCI论文级渲染效果的景深模糊参数配置,帮助研究者大幅提升数据处理与图片生成效率。

pz890123的博客 867

微信小程序 - 下单账号和支付账号不一致,请核实后再支付(微信小程序或微信H5页面/微信公众号网页支付时报错:“下单账号和支付账号不一致,请核实后再支付”,买家微信支付时提示错误)详细排查和解决方案!

微信支付出现 “下单账号与支付账号不一致,请核实后再支付”微信小程序下单账号与支付账号不一致不让支付,微信公众号网页 微信H5页面JS-SDK支付时出现错误:下单账号和支付账号不一致,请核实后再支付,openId导致的微信中“下单账号和支付账号不一致”原因及解决办法,调用统一下单所传openId与实际支付用户的openId不一致,微信支付jssdk报错,检查了没有不一致依然报错怎么办,微信支付下单账号和支付账号不一致,请核实后再支付,微信支付功能用JSAPI支付,H5页面负责下单并支付jsapi,微信调起支

🏆 前端领域优质创作者 5330

算法必刷系列之堆

堆可以解决查找和排序相关的问题。查找主要是查找数据中第几大/小数据的问题。遵循“查大用小,查小用大”的原则,排序主要是通过对堆排序解决排序问题。遵循“升序用小,降序用大”的原则

今天不coding的博客 653

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据结构常见面试题及详细java示例

如何在给定数组中找到重复的元素? 链表反转 二叉树的深度 如何在给定数组中找到缺失的数? 如何实现一个队列使用两个栈? 如何从链表中删除倒数第n个节点? 如何检查字符串中的括号是否正确配对? 如何从给定数组中找到前k大的元素? 二叉树的层次遍历 合并K个有序链表 二叉树中的最大路径和 找到数组中第K个最大的元素

哎 你看的博客 1160

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

秋招面试题

动态二维数组的定义: vector<vector<int>> a(nums.size(),vector<int>(2)); 返回行数:a.size() 返回列数:a[0].size() 用二维数组保存原数组的值和下标 #include <bits/stdc++.h> using namespace std; int main(){ vector<int> nums = {3,1,2,5,6,4,4}; int k = 3;

weixin_42906066的博客 239

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Leetcode刷题记录

2:两数相加。判断数组里和为n的两数位置。可用一层hash遍历解。 3:最长不重复子串。一层循环,用一个数组存储该字符上一次出现的位置。 5:最长回文子串。两层循环。 ...

weixin_44391390的博客 716

合并两个有序链表(精美图示详解哦)

合并两个有序链表,两种解法。有详细图示包理解哦,确定不进来看看嘛

weixin_73450183的博客 1万+

【Leetcode链表/数组--合并两/多个有序链表/数组】21/BM4.合并两个排序的链表 23/BM5.合并k个已排序的链表 378.有序矩阵中第 K 小的元素 373.查找和最小的 K 对数

文章目录Leetcode211.问题描述2.解决方案 Leetcode21 1.问题描述 2.解决方案

AloneYue优快云 589

两个以及K个有序链表合并

两个以及K个有序链表合并LeetCode21. 合并两个有序链表(难度:简单)LeetCode23. 合并K个有序链表(难度:困难) LeetCode21. 合并两个有序链表(难度:简单) 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3...

qq_36710632的博客 210

牛客题解 | 寻找第K大

牛客题库题解牛客题库题解

wc529065的博客 729

LeetCode 1198. 找出所有行中最小公共元素(二分/合并有序链表)

文章目录1. 题目2. 解题2.1 按列遍历2.2 二分查找2.3 合并k个有序链表 1. 题目 给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了。 请你帮忙找出在所有这些行中 最小的公共元素。 如果矩阵中没有这样的公共元素,就请返回 -1。 示例: 输入:mat = [[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]] 输出:5 提示: 1 <= mat.length, mat[i].length <= 500 1 <

Michael是个半路程序员 3016
上一篇: 如果你到了20岁,还没到 25岁
下一篇: 求串s到串t编辑距离并输出一种编辑方法
zystrive
博客等级 码龄18年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值