当前位置: 首页 > news >正文

寻找两个正序数的中位数(C)

最近面试,发现要手撕算法加上机试,被完败,索性给自己立一个目标,一周训练2次。

第一题。

给定两个大小分别为 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

提示:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -10^6 <= nums1[i], nums2[i] <= 10^6

这题力扣第四题,我看着简单,内容还可以一下子接受.想了快三个小时。

double get_mid(int* nums,int numsSize)
{if(numsSize%2){return nums[numsSize/2];}else{return (nums[numsSize/2]+nums[(numsSize)/2-1])*1.0/2;}
}double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {if((nums1Size==0)&&(nums2Size==0)) return 0;else if((nums1Size==0)&&(nums2Size!=0)){return get_mid(nums2,nums2Size);}else if((nums2Size==0)&&(nums1Size!=0)){return get_mid(nums1,nums1Size);}else{if(nums1[nums1Size-1] <=nums2[0]){int len = nums1Size+nums2Size ;int mid_index = len /2;if(len % 2 ) // 长度是奇数{if(mid_index >= nums1Size){return nums2[nums2Size-mid_index-1];}else{return nums1[mid_index]*1.0;}}else  //长度是偶数{if(mid_index < nums1Size){return (nums1[mid_index]+nums1[mid_index-1])*1.0/2;}else if((mid_index) == nums1Size){return (nums1[nums1Size-1]+nums2[0])*1.0/2;}else{return (nums2[nums2Size-mid_index-1]+nums2[nums2Size-mid_index])*1.0/2;}}}else if(nums2[nums2Size-1] <=nums1[0]){int len = nums1Size+nums2Size ;int mid_index = len /2;if(len % 2 ) //长度是奇数{if(mid_index >= nums2Size){return nums1[nums1Size-mid_index-1];}else{return nums2[mid_index];}}else //长度是偶数{if(mid_index < nums2Size){return (nums2[mid_index]+nums2[mid_index-1])*1.0/2;}else if((mid_index) == nums2Size){return (nums1[0]+nums2[nums2Size-1])*1.0/2;}else{return (nums1[nums1Size-mid_index-1]+nums1[nums1Size-mid_index])*1.0/2;}}}else{int len = nums1Size+nums2Size ;int mid_index = len /2;int count =0;int _n1 = 0,_n2=0;int last=0,midv=0;while(true){if(_n1 == nums1Size) {midv=nums2[_n2];count++;if(count == mid_index+1){if(len%2){return midv*1.0;}else{return (last+midv)*1.0/2;} }_n2++;last = midv;}else if(_n2 == nums2Size) {midv=nums1[_n1];count++;if(count == mid_index+1){if(len%2){return midv*1.0;}else{return (last+midv)*1.0/2;} }_n1++;last = midv;}else{if(nums1[_n1] >= nums2[_n2]){midv = nums2[_n2];count++;if(count == mid_index+1){if(len%2){return midv*1.0;}else{return (last+midv)*1.0/2;}}_n2++;last = midv;}else{midv = nums1[_n1];count++;if(count == mid_index+1){if(len%2){return midv;}else{return (last+midv)*1.0/2;}}_n1++;last = midv;}}}}}}

写的很烂很长,就是没有做过算法题目的人的思维,用了很多特殊情况来提高运算速度,其实把最后一个else提取出来也可以进行运算。但不知道为什么内存消耗很高。

相关文章:

寻找两个正序数的中位数(C)

最近面试&#xff0c;发现要手撕算法加上机试&#xff0c;被完败&#xff0c;索性给自己立一个目标&#xff0c;一周训练2次。 第一题。 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 …...

YOLOv10涨点改进:IoU优化 | Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…...

Spring Boot 实现动态配置导出,同时支持公式和动态下拉框渲染和性能优化案例示范

在业务系统中&#xff0c;数据导出是一个非常常见且重要的功能&#xff0c;本文将详细介绍如何在 Spring Boot 中实现这一功能&#xff0c;并结合 MySQL 数据库、MyBatis 作为数据访问层&#xff0c;EasyExcel 作为导出工具&#xff0c;展示如何在电商交易系统中搭建灵活、可扩…...

一网打尽 运维必封的50个高危端口清单,零基础入门到精通,收藏这一篇就够了

文件传输相关端口&#xff1a; • TCP 20、21&#xff1a;FTP 服务&#xff08;文件传输协议&#xff09;端口&#xff0c;FTP 传输数据时未加密&#xff0c;容易受到攻击&#xff0c;如匿名上传下载、爆破、嗅探、远程执行等攻击&#xff0c;可能导致敏感文件泄露。 • TCP …...

方法 WebDriverWait

定义&#xff1a; WebDriverWait是Selenium WebDriver提供的一个工具类&#xff0c;它允许你设置等待条件&#xff0c;直到这个条件成立&#xff0c;才继续执行代码。这对于处理网页上的异步加载元素特别有用&#xff0c;比如等待某个元素变得可见、可点击等。 from se…...

LOESS(Locally Estimated Scatterplot Smoothing)

文章目录 LOESS 原理详解&#xff1a;LOESS 的优点&#xff1a;LOESS 的缺点&#xff1a;Python 实现代码&#xff1a;代码说明&#xff1a; LOESS&#xff08;Locally Estimated Scatterplot Smoothing&#xff09;&#xff0c;即局部加权回归&#xff0c;是一种非参数回归方法…...

每天学习一个技术栈 ——【Django Channels】篇(1)

在当今快速发展的技术领域&#xff0c;掌握多种技术栈已经成为开发者提升竞争力的关键。随着实时应用需求的不断增加&#xff0c;如何高效地处理并发请求和实时通信变得尤为重要。在众多解决方案中&#xff0c;Django Channels作为Django框架的强大扩展&#xff0c;能够轻松实现…...

js设计模式-工厂模式 单例模式 观察者模式 发布订阅模式 原型模式 代理模式 迭代器模式

1 工厂模式 // 工厂模式: 调用函数返回对象function factory(name, age){return {name: name,age: age} }const person1 factory(Tom, 18); // 类似的库使用工厂函数的有: jQuery, React.createElement,axios.create,vue.createApp等 2 单例模式 // 单例模式&#xff1a;单…...

关于Java中的List<User>如何进行深拷贝

联调中发现了一个很初级&#xff0c;但有容易被忽略的拷贝问题&#xff1a; 错误方式&#xff1a;List<User> us new ArrayList<>(); // name "张三"List<User> us1 new ArrayList<>(us);for (User u : us) {...u.setName("douzi&q…...

2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点

云计算de小白 投资人工智能&#xff1a;平衡潜力与实用性 到 2025 年&#xff0c;人工智能将成为 IT 支出的重要驱动力&#xff0c;尤其是在生成式人工智能领域。人工智能的前景在于它有可能彻底改变业务流程、增强决策能力并开辟新的收入来源。然而&#xff0c;现实情况更加微…...

Cortex-A7和Cortex-M7架构处理器取中断向量全流程分析

0 参考资料 Cortex M3权威指南(中文).pdf ARM Cortex-A(armV7)编程手册V4.0.pdf1 Cortex-A7和Cortex-M7处理器架构取中断向量全流程分析 1.1 什么是中断向量&#xff1f; 中断向量就是中断服务函数入口地址&#xff0c;例如我们发生了EXTI0中断&#xff0c;就需要执行EXT0中…...

MODELS 2024震撼续章:科技与可持续性的未来交响曲

MODELS 2024国际会议正如火如荼地进行着&#xff0c;每一天都充满了新的发现与启迪&#xff0c;每一场分享都是对技术前沿的一次深刻探索&#xff0c;更是对现实世界可持续性挑战的一次积极回应。现在让我们继续这场科技盛宴&#xff0c;看看小编为您精选几场的学术分享吧~ 会议…...

CICD 持续集成与持续交付

一 、CICD是什么 CI/CD 是指持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09; 1.1 持续集成&#xff08;Continuous Integration&#xff09; 持续集…...

“数据面”(Data Plane)是指负责实际数据处理和转发的部分

在计算机网络和服务架构中&#xff0c;“数据面”&#xff08;Data Plane&#xff09;是指负责实际数据处理和转发的部分。数据面负责执行具体的网络通信任务&#xff0c;如接收、处理和转发数据包。与数据面对应的是“控制面”&#xff08;Control Plane&#xff09;&#xff…...

面试题:MySQL你用过WITH吗?领免费激活码

感谢Java面试教程的Java多线程文章&#xff0c;点击查看>原文 Java面试教程&#xff0c;发mmm116可获取IDEA-jihuoma 在MySQL中&#xff0c;WITH子句用于定义临时表或视图&#xff0c;也称为公共表表达式&#xff08;CTE&#xff09;。它允许你在一个查询中定义一个临时结果…...

consul 介绍与使用,以及spring boot 项目的集成

目录 前言一、Consul 介绍二、Consul 的使用三、Spring Boot 项目集成 Consul总结前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是…...

Linux常用命令shell常用知识 。。。。面试被虐之后,吐血整理。。。。

Linux三剑客&常用命令&shell常识 Linux三剑客grep - print lines matching a patternsed - stream editor for filtering and transforming textawkman awk Linux常用命令dd命令ssh命令tar命令curl命令top命令tr命令xargs命令sort命令du/df/free命令 shell 知识functio…...

压力测试指南-压力测试基础入门

压力测试基础入门 在当今快速迭代的软件开发环境中&#xff0c;确保应用程序在高负载情况下仍能稳定运行变得至关重要。这正是压力测试大显身手的时刻。本文将带领您深入了解压力测试的基础知识&#xff0c;介绍实用工具&#xff0c;并指导您设计、执行压力测试&#xff0c;最…...

Linux:LCD驱动开发

目录 1.不同接口的LCD硬件操作原理 应用工程师眼中看到的LCD 1.1像素的颜色怎么表示 ​编辑 1.2怎么把颜色发给LCD 驱动工程师眼中看到的LCD 统一的LCD硬件模型 8080接口 TFTRGB接口 什么是MIPI Framebuffer驱动程序框架 怎么编写Framebuffer驱动框架 硬件LCD时序分析…...

QT:常用类与组件

1.设计QQ的界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel>//自定义类Widget,采用public方式继承QWidget&#xff0c;该类封装了图形化界面的相关操作&#xff…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...