力扣4寻找两个正序数组的中位数

1.实验内容

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

2.实验目的

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

3.基本思路

碰到时间复杂度要求log的,肯定用二分查找,即每次在现有数据的一半中找,下一次再一半,每次循环可以将查找范围缩小一半。但是我这里用多的是双指针算法,一起查找,不需要归并数组,只需找到中位数的下标,但是复杂度仍然是O(min(m+n))

4.算法分析

首先需要通过判断`m`和`n`的大小来确定两个数组是否为空。

如果两个数组都不为空,则使用双指针法遍历两个数组,将较小的元素依次添加到动态数组`temp`中,直到找到第k+1小的元素为止。

如果其中一个数组为空,则直接将另一个非空数组赋值给`temp`。最后,根据`(m+n)%2`的值来判断中位数的位置。如果为奇数,则直接取`temp[k]`作为结果;如果为偶数,则取`temp[k]`和`temp[k-1]`的平均值作为结果。

5.实验心得

碰到时间复杂度要求log的,肯定用二分查找;但是双指针算法比普通的归并算法还是要好一些。

代码:

class Solution {
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {float result;int m=nums1.size();int n=nums2.size();int k=(m+n)/2;vector <int> temp;int i=0,j=0;int count=0;//如两个数组不为空,找到前k+1小数存入新数组if(m>0&& n>0){while(count<=k){if(i==m){temp.push_back(nums2[j++]);count++;continue;}if(j==n){temp.push_back(nums1[i++]);count++;continue;}temp.push_back(nums1[i]<=nums2[j]?nums1[(i++)]:nums2[(j++)]);count++;}}//其中一个数组为空的情况下else if(m==0) temp=nums2;else if(n==0) temp=nums1;//返回中位数if((m+n)%2!=0){result=temp[k];}else {result=(float(temp[k])+float(temp[k-1]))/2;}return result;}    
};

(PS:不是我写的)

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

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

相关文章

【Markdown】【mermaid】Mermaid流程图基础语法Flowcharts - Basic Syntax

流程图 - 基础语法 流程图简介节点默认节点带文本的节点Unicode 文本Markdown 格式化 流程图方向节点形状圆角矩形节点体育场形节点子程序形节点圆柱形节点圆形节点不对称节点菱形节点六边形节点平行四边形节点另一种平行四边形节点梯形节点另一种梯形节点双圆节点 节点之间的连…

shell编程入门(笔记)

1、shell编程基础&#xff1a; 1.1、shell的解释执行功能 1.2、什么是shell程序&#xff1f; 1.3、shell程序编程的主要内容 1.4、shell程序的第一行 1.5、变量要求 1.6、环境变量和只读变量 1.7、位置参量 1.8、位置参量列表 1.9、数组 2、输入输出 2.1、输入-read命令 2.2…

Pytest用例间参数传递的两种实现方式示例

前言 我们在做接口自动化测试的时候&#xff0c;会经常遇到这种场景&#xff1a;接口A的返回结果中的某个字段&#xff0c;是接口B的某个字段的入参。如果是使用postman&#xff0c;那我们可以通过设置后置变量&#xff0c;然后在需要使用的地方通过{{}}的方式来进行调用。但是…

[LLM]大模型基础知识点--大模型与LLM

1、什么是大模型&#xff1f; 定义&#xff1a;在机器学习领域&#xff0c;"大模型"通常指的是拥有大量参数的深度学习模型。这些模型通常由数十亿甚至数千亿个参数组成。 特点&#xff1a;由于参数众多&#xff0c;这些模型能够从大量数据中学习复杂的模式和关系。…

OJ : 1087 : 获取出生日期(多实例测试)

题目描述 输入某人的18位身份证号&#xff0c;输出其出生日期。 输入 多实例测试。首先输入一个整数n&#xff0c;表示测试实例的个数&#xff0c;然后是n行&#xff0c;每行是一个18位身份证号。 输出 对于输入的每个身份证号&#xff0c;输出一行&#xff0c;即其对应的…

SpringMVC 的运行流程

Spring MVC 是一个基于 MVC 设计模式的 Web 框架&#xff0c;它提供了一种优雅的方式来构建 Web 应用程序&#xff0c;将应用程序的不同部分分离开来&#xff0c;以便更好地管理和维护。了解 Spring MVC 的运行流程对于理解它的工作原理以及在实际项目中的应用非常重要。 1. 请…

银行卡账户交易异常已被限制部分功能,怎么办?

文章目录 I 解决方案1.1 限制原因1.2 防范1.3 案例1.4 用卡安全小知识II 个人账户收款监管规则III 反诈提醒I 解决方案 处理非柜面交易限制,只能到开户行柜台申请解除。异地卡的,需要联系开户行,提供相关资料。有些地方银行的,比如长沙银行,可以使用线上柜台进行审核。先到…

# termux连接云服务器

termux使用 pkg install openssh 连接服务器 ssh root39.100.181.23 安装postgres

不满足软件包要求‘transformers==4.30.2‘, ‘sse-starlette

transformers4.30.2支持的SSE-Starlette版本是0.14.0

Flume入门概述及安装部署

目录 一、Flume概述1.1 Flume定义1.2 Flume基础架构 二、Flume安装部署 一、Flume概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构&#xff0c;灵活简单。 1.2 Flume基础…

Python实现计算复读次数(附带源码)

在Python中&#xff0c;可以使用以下几种方法计算复读次数&#xff1a; 方法一&#xff1a;使用count()函数 count()函数用于统计字符串中某个字符或子字符串出现的次数。 示例&#xff1a; Python # 计算字符串中 "a" 出现的次数 count "hello world&quo…

13、Deconstructing Denoising Diffusion Models for Self-Supervised Learning

简介 研究了最初用于图像生成的去噪扩散模型(DDM)的表示学习能力 解构DDM&#xff0c;逐步将其转变为经典的去噪自动编码器(DAE) 探索现代ddm的各个组成部分如何影响自监督表征学习 结论&#xff1a; 只有很少的现代组件对于学习良好的表示是至关重要的&#xff0c;而其他许多…

Linux gcc二进制下载地址

Index of /download/x86_64/releases 待验证&#xff1a; export PATH$HOME/YOURS/gcc-5.4.0/bin:$PATH export LD_LIBRARY_PATH$HOME/YOURS/gcc-5.4.0/lib:$HOME/YOURS/gcc-5.4.0/lib64:$LD_LIBRARY_PATH

【算法刷题day2】Leetcode:977.有序数组的平方、 209.长度最小的子数组、59.螺旋矩阵II

Leetcode:977.有序数组的平方 文档讲解&#xff1a;[代码随想录] 题目链接&#xff1a;977.有序数组的平方 状态&#xff1a;ok 题目&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序…

web蓝桥杯真题:心愿便利贴

代码及注释&#xff1a; <!-- TODO 待修改的代码 --> <div class"card" :class"item.css" v-for"(item,index) in wishList" :key"index"><div class"header"><img class"close" click&quo…

智能ai写作神器,推荐5个ai在线写作生成器

智能AI写作神器&#xff0c;是不是听起来就很神奇&#xff1f;它们可以帮助我们省去无尽的头疼和煎熬&#xff0c;让我们的文字轻松流畅&#xff0c;幽默风趣。今天&#xff0c;我要向大家推荐五款AI在线写作生成器&#xff0c;让我们一起来看看吧&#xff01; 第一个&#xff…

训练YOLOv9-S

1. YOLOv9-S网络结构 1.1 改前改后的网络结构&#xff08;参数量、计算量&#xff09;对比 修改前调用的yolo.py测试的yolov9.yaml的打印网络情况&#xff0c;包含参数量、计算量 修改后调用的yolo.py测试的yolov9.yaml的打印网络情况&#xff0c;包含参数量、计算量 1.2 …

flutter实现视频播放器,可根据指定视频地址播放、设置声音,进度条拖动,下载等

需要装依赖&#xff1a; gallery_saver: ^2.3.2video_player: ^2.8.3 实现代码 import dart:async; import dart:io;import package:flutter/material.dart; import package:gallery_saver/gallery_saver.dart; import package:path_provider/path_provider.dart; import pac…

Revit2020也能玩衍生式设计?

Revit2021新增的一个好玩功能就是衍生式设计&#xff0c;但是Autodesk2021系列的激活目前还比较麻烦&#xff0c;尤其是要装多款2021软件的时候&#xff0c;注册机用起来还挺烦人的&#xff0c;于是&#xff0c;为了省事&#xff0c;我把GenerativeDesignRevit节点包扔到了Dyna…

大模型应用开发:手把手教你部署并使用清华智谱GLM大模型

部署一个自己的大模型&#xff0c;没事的时候玩两下&#xff0c;这可能是很多技术同学想做但又迟迟没下手的事情&#xff0c;没下手的原因很可能是成本太高&#xff0c;近万元的RTX3090显卡&#xff0c;想想都肉疼&#xff0c;又或者官方的部署说明过于简单&#xff0c;安装的时…