寻找两个有序数组的中位数算法(leetcode第4题)

题目描述:

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

算法:中位数定义

代码实现:
# include<stdlib.h>int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int newNums[2000]={0};for(int i=0;i<nums1Size;i++)newNums[i]=nums1[i];for(int i=0;i<nums2Size;i++)newNums[i+nums1Size]=nums2[i];int len=nums1Size+nums2Size;double ret=0;qsort(newNums,len,sizeof(newNums[0]),cmp_int);if(len%2==0) ret=(double)(newNums[len/2]+newNums[len/2-1])/2.0;else ret=(double)newNums[len/2];return ret;
}

算法:排序优化

代码实现:

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int len=nums1Size+nums2Size;int arr[len];//创建足够大的新数组for(int i=0;i<nums1Size;i++) arr[i]=nums1[i];int m=nums1Size-1,n=nums2Size-1;int index=m+n+1;while(n>=0){//排序(从小到大)while(m>=0 && nums1[m]>nums2[n]){arr[index--]=nums1[m--];}arr[index--]=nums2[n--];}double ret;if(len%2==0) //偶数ret=(double)(arr[len/2]+arr[len/2-1])/2.0;else //奇数ret=(double)arr[len/2];return ret;}

算法:二分法

代码实现:

double findTheKthNumber(int *nums1,int nums1Size,int *nums2,int nums2Size,int k){// int i=0,j=0;// int delta=k/2-1;// while(1){//     if(i>=nums1Size){//         return nums2[k-nums1Size-1];//     }//     if(j>=nums2Size){//         return nums1[k-nums2Size-1];//     }//     if(nums1[i+delta]>nums2[j+delta]){//         if(k==1) return (double)nums1[i+delta];//         j+=delta+1;//     }//     else{//         if(k==1) return (double)nums2[j+delta];//         i+=delta+1;//     }//     k-=k/2;//     delta=k/2-1;// }int m = nums1Size;int n = nums2Size;int index1 = 0, index2 = 0;//二分查找while (1) {// 边界情况if (index1 == m) {return nums2[index2 + k - 1];}if (index2 == n) {return nums1[index1 + k - 1];}if (k == 1) {return nums1[index1]>nums2[index2]?nums2[index2]:nums1[index1];}// 正常情况int newIndex1 = index1+k/2-1>m-1?m-1:index1+k/2-1;int newIndex2 = index2+k/2-1>n-1?n-1:index2+k/2-1;int pivot1 = nums1[newIndex1];int pivot2 = nums2[newIndex2];if (pivot1 <= pivot2) {k -= newIndex1 - index1 + 1;index1 = newIndex1 + 1;}else {k -= newIndex2 - index2 + 1;index2 = newIndex2 + 1;}}
}double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {//A: 1 3 4 9//B: 1 2 3 4 5 6 7 8 9//ret-->4int len=nums1Size+nums2Size;if(len%2==0){//偶数return (findTheKthNumber(nums1,nums1Size,nums2,nums2Size,len/2)+
findTheKthNumber(nums1,nums1Size,nums2,nums2Size,len/2+1))/2.0;}else{//奇数return findTheKthNumber(nums1,nums1Size,nums2,nums2Size,len/2+1);}}

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

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

相关文章

【数值计算方法(黄明游)】函数插值与曲线拟合(二):Newton插值【理论到程序】

​ 文章目录 一、近似表达方式1. 插值&#xff08;Interpolation&#xff09;2. 拟合&#xff08;Fitting&#xff09;3. 投影&#xff08;Projection&#xff09; 二、Lagrange插值1. 拉格朗日插值方法2. Lagrange插值公式a. 线性插值&#xff08;n1&#xff09;b. 抛物插值&…

JavaWeb 前端工程化

前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。 前端工程化实现技术栈 前端工程化实现的技术栈有很多,我们采用ES6nodejsnpmViteVUE3routerpiniaaxiosElement-plus组合来实现 ECMAScri…

Rust语言项目实战(九 - 完结) - 胜利与失败

回顾 在前面的章节中,我们已经实现了这个游戏中大部分的模块和功能,我们可以指挥我们的战机左右移动,并发射子弹;我们还创造了一堆的侵略者,从屏幕上方缓缓降落,试图到达屏幕的底部。 本章中,我们将对游戏的输赢作出最后的裁决,到底是我们的保卫者英勇无敌,还是侵略…

glibc下的tpmalloc

文章目录 1、内存布局2、操作系统内存分配的相关函数2.1 Heap 操作相关函数2.2 Mmap 映射区域操作相关函数 3、ptmalloc的实现原理3.1 Main_arena 与 non_main_arena3.2 chunk 结构3.3 空闲 chunk 容器的组织形式3.3.1 small bin3.3.2 Large bins3.3.3 Unsorted bin3.3.4 Fast …

如何使用Cloudreve搭建本地云盘系统并实现随时远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

关于1panel面板中OpenResty配置证书的格式问题探究

文章目录 说明ssl证书格式CRT&PEM转换方法linux系统win系统 问题&#xff1a; ASN.1 编码错误补充&#xff1a;DER和pem编码格式 说明 armbian中使用OpenResty进行反向代理&#xff0c;配置ssl证书&#xff0c;但是由于和官网申请的证书内容格式内容不太一样&#xff0c;所…

深入浅出理解kafka

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…

利用 FormData 实现文件上传、监控网路速度和上传进度(前端原生,后端 koa)

利用 FormData 实现文件上传 基础功能&#xff1a;上传文件 演示如下&#xff1a; 概括流程&#xff1a; 前端&#xff1a;把文件数据获取并 append 到 FormData 对象中后端&#xff1a;通过 ctx.request.files 对象拿到二进制数据&#xff0c;获得 node 暂存的文件路径 前端…

编程语言中常量(Constant)简介

编程语言中常量&#xff08;Constant&#xff09;简介 编程语言中&#xff0c;常量&#xff08;Constant&#xff09;是程序中固定不变的值&#xff0c;它们在定义后不能被修改。“不能被修改”意味着在常量的生命周期内&#xff0c;它的值是不可变的&#xff0c;你不能再给它赋…

【latex笔记】双栏格式下插入单栏、双栏格式图片

双栏格式下插入单栏、双栏格式图片 1.缘起multicols2.双栏格式 插入单栏图片3.双栏格式 插入双栏图片 1.缘起multicols 插入双栏格式图片问题被困扰了有很长一段时间&#xff0c;查看网络资源也一直没找到解决方法&#xff0c;今天查看Latex官方文档&#xff0c;才发现因为mul…

搜索引擎高级用法总结: 谷歌、百度、必应

搜索引擎高级用法总结: 谷歌、百度、必应 google search 基本搜索 逻辑与:and逻辑或: or逻辑非: -完整匹配:“关键词”通配符:* ?高级搜索 intext:后台登录 将只返回正文中包含 后台登录 的网页 intitle intitle:后台登录 将只返回标题中包含 后台登录 的网页,intitle…

探索图像生成中的生成对抗网络 (GAN) 世界

一、介绍 生成对抗网络&#xff08;GAN&#xff09;的出现标志着人工智能领域的一个重要里程碑&#xff0c;特别是在图像生成领域。GAN 由 Ian Goodfellow 和他的同事于 2014 年提出&#xff0c;代表了机器学习中的一种新颖方法&#xff0c;展示了生成高度逼真和多样化图像的能…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue

1 通过Athena查询s3中的数据 此实验使用s3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 1 通过Athena查询s3中的数据1.1 架构图1.2 创建Glue数据库1.3 创建爬网程序1.4 创建表1.4.1 爬网程序创建表1.4.2 手动创建表 1…

剑指 Offer(第2版)面试题 16:数值的整数次方

剑指 Offer&#xff08;第2版&#xff09;面试题 16&#xff1a;数值的整数次方 剑指 Offer&#xff08;第2版&#xff09;面试题 16&#xff1a;数值的整数次方解法1&#xff1a;快速幂 - 递归写法解法2&#xff1a;快速幂 - 非递归写法 剑指 Offer&#xff08;第2版&#xff…

【STM32】STM32学习笔记-GPIO输出(05)

00. 目录 文章目录 00. 目录01. GPIO简介02. GPIO基本结构03. GPIO位结构04. GPIO模式4.1 输入浮空4.2 输入上拉4.3 输入下拉4.4 模拟输入4.5 开漏输出4.6 开漏复用功能4.7 推挽式输出4.8 推挽式复用功能 05. LED和蜂鸣器简介06. 面包板07. 附录 01. GPIO简介 GPIO&#xff08…

简单总结顺序表和链表的区别和联系

顺序表&#xff1a; 优点: 空间连续&#xff0c;支持随机访问 缺点&#xff1a; 1. 中间或前面部分的插入删除时间复杂度O&#xff08;N&#xff09; 2. 增容的代价较大&#xff08;以二倍的容量增溶&#xff09; 链表&#xff08;带头双向循环&#xff09;&#xff1a; …

ES 快照到 S3 并从 Windows 共享目录恢复(qbit)

前言 业务需要将 Elasticsearch 快照到 AWS S3&#xff0c;再将快照拷贝到 Windows 系统&#xff0c;并恢复到 Elasticsearch。如下图所示&#xff1a; 环境 Elasticsearch 7.10.1 Windows Server 2019 Ubuntu 20.04 &#xff08;ES 宿主&#xff09; ES 集群1 安装 S3 插…

GPIO的使用--点亮外接小灯泡--开关控制

目录 一、确定引脚接线模式 接线时注意以下几点&#xff1a; 二、外接小灯泡引脚连接(以F12引脚为例) 1.正极接GPIOF3.3v电压引脚、负极接F12 2.正极接GPIOF3.3v电压引脚、负极接F12 三、问题检查 一、确定引脚接线模式 小灯泡有两级&#xff1a;正极、负极&#xff0c;…

DevOps搭建(二)-VMware安装虚拟机详细步骤

1、下载Centos镜像 官方下载地址: Download 这里我们使用Centos7镜像 下载地址: Index of /centos/7.9.2009/isos/x86_64/ 2、设置固定IP 2.1、VMware的配置 首先打开编辑里面的 虚拟网络编辑器,如图: 进入更改设置之后,进行后面的操作,

pytorch 数据预加载

1. Abstract 本文介绍一个工具 PreDataLoader&#xff0c;它包装 torch.utils.data.DataLoader&#xff0c;接收该类的一个实例 loader&#xff0c;启动一个线程 t&#xff0c;创建一个队列 q&#xff0c;t 将 loader 中的数据预加载到队列 q 中, 以在模型计算时也能启动启动数…