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

Leetcode刷题4--- 寻找两个正序数组的中位数 Python

目录

  • 题目及分析
  • 方法一:直接合并后排序
  • 方法二:二分查找法

题目及分析

(力扣序号4:[寻找两个正序数组的中位数](https://leetcode.cn/problems/median-of-two-sorted-arrays/description/)
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数

示例 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
-106 <= nums1[i], nums2[i] <= 106

方法一:直接合并后排序

思路分析:

  1. 将两个数组合并成一个数组。
  2. 对合并后的数组进行排序。
  3. 找到排序后数组的中位数。
    a. 如果合并后的数组长度是奇数,中位数就是数组中间那个元素。
    b. 如果合并后的数组长度是偶数,中位数就是数组中间两个元素的平均值。
def findMedianSortedArrays(nums1, nums2):# 合并两个数组merged_array = nums1 + nums2# 对合并后的数组进行排序merged_array.sort()# 获取合并后的数组长度length = len(merged_array)# 判断长度的奇偶性,并返回中位数if length % 2 == 1:return merged_array[length // 2]else:return (merged_array[length // 2 - 1] + merged_array[length // 2]) / 2.0

方法二:二分查找法

思路分析:

  1. 使用二分查找法,在较短的数组上进行二分查找。
  2. 设定两个数组的分割线,使得分割线左边的元素总数等于分割线右边的元素总数。
  3. 比较分割线左边和右边的元素,调整分割线位置,直到找到合适的分割线。
  4. 计算并返回中位数。
def findMedianSortedArrays(nums1, nums2):# 保证nums1是较短的数组if len(nums1) > len(nums2):nums1, nums2 = nums2, nums1m, n = len(nums1), len(nums2)imin, imax, half_len = 0, m, (m + n + 1) // 2while imin <= imax:i = (imin + imax) // 2j = half_len - iif i < m and nums2[j-1] > nums1[i]:imin = i + 1elif i > 0 and nums1[i-1] > nums2[j]:imax = i - 1else:if i == 0: max_of_left = nums2[j-1]elif j == 0: max_of_left = nums1[i-1]else: max_of_left = max(nums1[i-1], nums2[j-1])if (m + n) % 2 == 1:return max_of_leftif i == m: min_of_right = nums2[j]elif j == n: min_of_right = nums1[i]else: min_of_right = min(nums1[i], nums2[j])return (max_of_left + min_of_right) / 2.0

相关文章:

Leetcode刷题4--- 寻找两个正序数组的中位数 Python

目录 题目及分析方法一&#xff1a;直接合并后排序方法二&#xff1a;二分查找法 题目及分析 &#xff08;力扣序号4&#xff1a;[寻找两个正序数组的中位数](https://leetcode.cn/problems/median-of-two-sorted-arrays/description/&#xff09; 给定两个大小分别为 m 和 n …...

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …...

【微信小程序知识点】自定义构建npm

在实际开发中&#xff0c;随着项目的功能越来越多&#xff0c;项目越来越复杂&#xff0c;文件目录也变得很繁琐&#xff0c;为了方便进行项目的开发&#xff0c;开发人员通常会对目录结构进行优化调整&#xff0c;例如&#xff1a;将小程序源码放到miniprogram目录下。 &…...

JCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNN-MATTGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分…...

新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧

前言 在日常开发中,MongoDB作为一种灵活高效的NoSQL数据库,深受开发者喜爱。然而,如何高效地进行数据的批量插入和更新,却常常让人头疼。今天,我们将一起探讨如何使用MongoDB的bulk_write方法,简化我们的数据管理流程,让代码更加简洁高效。 常规做法:find、insertone…...

C# Winform 自定义事件实战

在C#的WinForms中&#xff0c;自定义事件是一种强大的工具&#xff0c;它允许你创建自己的事件&#xff0c;从而在特定条件下通知订阅者。自定义事件通常用于封装业务逻辑&#xff0c;使代码更加模块化和易于维护。下面我将通过一个实战例子来展示如何在WinForms中创建和使用自…...

Python通过继承实现多线程

本套课在线学习视频&#xff08;网盘地址&#xff0c;保存到网盘即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/677661ea63b3​​ 本节将介绍如何利用Python中的thread模块和threading模块实现多线程&#xff0c;并通过继承threading.Thread类并重写run方…...

记一次项目经历

一、项目需求 1、设备四个工位&#xff0c;每个工位需要测试产品的电参数&#xff1b; 2、每个另外加四个位置温度&#xff1b; 3、显示4个通道电流曲线&#xff0c;16个通道温度曲线&#xff1b; 4、可切换工艺参数&#xff1b; 5、常规判定&#xff0c;测试数据保存到表格内&…...

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中&#xff0c;使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似&#xff0c;但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子&#xff1a; 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…...

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 &#x1f343;前言&#x1f38d;解决方案&#x1f6a9;关于注册中⼼&#x1f6a9;CAP理论&#x1f6a9;常见的注册中心 &#x1f384;Eureka&#x1f6a9;搭建 Eureka Server&#x1f388;创建Eureka-server ⼦模块&#x1f388;引入依赖&#x1f388;项目构建插件&am…...

JDK安装详细教程(以JDK17为例)

一、JDK的下载 1. 前往oracle官网下载JDK Java Archive Downloads - Java SE 17 在这里选择对应的JDK版本&#xff0c;我这里就直接选择JDK17的版本了。 然后下载对应的软件包&#xff0c;我这里采用的是Windows的安装程序。 点击上述圈起来的链接即可下载安装包&#xff0c;…...

安装nodejs | npm报错

nodejs安装步骤: 官网&#xff1a;https://nodejs.org/en/ 在官网下载nodejs: 双击下载下来的msi安装包&#xff0c;一直点next&#xff0c;我选的安装目录是默认的: 测试是否安装成功&#xff1a; 输入cmd打开命令提示符&#xff0c;输入node -v可以看到版本&#xff0c;说…...

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界&#xff01;对于刚从Java转过来的开发者来说&#xff0c;你会发现C#和Java有很多相似之处&#xff0c;但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法&#xff0c;并比较一下与Java的异同。 程序结构 C#程序…...

【C++】C++中SDKDDKVer.h和WinSDKVer.h函数库详解

目录 一.SDKDDKVer.h介绍 二.WinSDKVer.h介绍 三.WinSDKVer.h 和 SDKDDKVer.h 的区别 一.SDKDDKVer.h介绍 SDKDDKVer.h 是一个在 Windows 软件开发中常见的头文件&#xff0c;它用于定义软件开发工具包&#xff08;SDK&#xff09;和驱动开发工具包&#xff08;DDK&…...

uni-app 蓝牙传输

https://www.cnblogs.com/ckfuture/p/16450418.html https://www.cnblogs.com/yangxiaobai123/p/16021058.html 字符串转base64&#xff1a;https://www.cnblogs.com/sunny3158/p/17312158.html 将 ArrayBuffer 对象转成 Base64 字符串&#xff1a;基础 - uni.arrayBufferT…...

MBR10200CT-ASEMI智能AI应用MBR10200CT

编辑&#xff1a;ll MBR10200CT-ASEMI智能AI应用MBR10200CT 型号&#xff1a;MBR10200CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向…...

力扣 爬楼梯

动态规划算法基础篇。 class Solution {public int climbStairs(int n) {int[] f new int[n 1];f[0] 1;f[1] 1;//当爬到n阶楼梯时&#xff0c;可知是由n-1阶或n-2阶楼梯而来for(int i 2; i < n; i) {f[i] f[i - 1] f[i - 2];//后面的每一阶种数由前两个状态得到}ret…...

java设计模式之:策略模式+工厂模式整合案例实战(一)

本文介绍项目中常用的策略模式工厂模式的案例&#xff0c;该案例是针对策略类比较少的情况&#xff1b;下一篇会讲解策略类比较多的案例&#xff0c;下面直接开始&#xff1a; 案例1&#xff1a;项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉) 首先要有通知的策略…...

国内Ubuntu安装 stable-diffusion教程,换成国内镜像

安装依赖&#xff1a; 首先更新系统并安装Python 3.10和pip&#xff1a; sudo apt update sudo apt install python3.10 python3-pip 设置Python虚拟环境&#xff08;可选&#xff09;&#xff1a; 安装Python虚拟环境管理工具&#xff0c;并创建激活虚拟环境&#xff1a; su…...

JAVA final详细介绍

一、介绍 final 中文意思: 最后的,最终的. final 可以修饰类、属性、方法和局部变量, 在某些情况下,程序员可能有以下需求&#xff0c;就会使用到final&#xff1a; 1&#xff09;当不希望类被继承时,可以用final修饰。 //如果我们要求A类不能被其他类继承 //可以使用fin…...

别再只用yum了!手把手教你用RPM包在CentOS 7.9上安装最新版LibreOffice 7.5.4(含中文包)

告别老旧版本&#xff1a;CentOS 7.9手动安装LibreOffice 7.5.4全攻略 在开源办公软件领域&#xff0c;LibreOffice无疑是当前最活跃、功能最全面的选择之一。然而许多CentOS用户发现&#xff0c;通过系统默认的yum仓库安装的LibreOffice版本往往落后官方最新版数年之久。以Cen…...

手把手教你用Google Cloud语音API为Android App加个“耳朵”和“嘴巴”(附免费额度避坑指南)

实战指南&#xff1a;在Android应用中集成Google Cloud语音技术 想象一下&#xff0c;你的Android应用能够听懂用户说话&#xff0c;还能用自然流畅的语音回应——这不再是科幻电影里的场景。借助Google Cloud的语音API&#xff0c;即使是独立开发者也能快速为应用添加专业的语…...

【AI】了解ChatMemory 底层实现机制

&#xff08;说实在&#xff0c;看个 七、整体架构总结 就行了&#xff09; 为何要了解底层原理&#xff0c;其意义在于出问题好排查&#xff0c;写代码时有思路。 基于源码调试与运行时验证&#xff0c;深度拆解ChatMemory 底层实现机制&#xff0c;重点解析 ChatMemoryStor…...

【2025 版】CMD 命令大全|超详细!零基础到精通,一篇封神✅

在Windows操作系统中&#xff0c;命令提示符&#xff08;CMD&#xff09;是一个强大的工具&#xff0c;允许用户通过输入命令来执行各种操作。无论是系统管理、网络配置&#xff0c;还是文件管理&#xff0c;CMD都能提供高效的解决方案。 一、基本命令 cd&#xff1a;更改目录…...

非线性声学与强化学习融合的智能声学处理技术

1. 非线性声学与强化学习的融合框架解析在复杂声学环境中&#xff0c;传统线性声学模型往往难以应对高阶声学现象。非线性声学理论通过Westervelt方程和KZK方程等物理模型&#xff0c;能够准确描述声波在非线性介质中的传播特性。这些方程考虑了介质压缩性和边界反射等非线性效…...

靖江注册公司需要多少钱?2026最新费用明细与隐形消费避坑指南

对于靖江的传统小微型企业、个体工商户、夫妻店及初创公司而言&#xff0c;注册公司的费用多少、是否存在隐形消费&#xff0c;是创业初期最关心的问题。这类企业大多没有专职会计&#xff0c;社保参保人数通常在3人以下&#xff0c;注册年限多在2年内&#xff0c;资金预算有限…...

用逻辑分析仪实测STC15W408AS驱动BLDC电机:PWM波形与换相时序全解析

用逻辑分析仪实测STC15W408AS驱动BLDC电机&#xff1a;PWM波形与换相时序全解析 当硬件电路搭建完成&#xff0c;代码烧录进单片机后&#xff0c;真正的挑战才刚刚开始——如何验证那些看不见的电信号是否按预期工作&#xff1f;本文将以STC15W408AS驱动无感BLDC电机为例&#…...

别再手动拖拽了!Unity运行时动态生成材质球,实现AR涂鸦功能的完整流程(附代码)

Unity运行时动态材质生成&#xff1a;打造高性能AR涂鸦系统的核心技术解析 在移动AR应用开发中&#xff0c;实时材质生成技术正成为提升用户体验的关键突破点。想象这样一个场景&#xff1a;儿童教育应用中&#xff0c;孩子随手绘制的涂鸦瞬间变成3D恐龙皮肤的纹理&#xff1b;…...

GNSS模块教程:大夏龙雀 DX-GP21,从硬件接线到 NMEA 数据解析

在物联网、无人机、精准农业等场景中&#xff0c;高精度定位是核心需求。深圳大夏龙雀科技的 DX-GP21 作为一款多模多频 GNSS 模块&#xff0c;支持北斗、GPS、Galileo 等多系统联合定位&#xff0c;定位精度&#xff1c;1.0m&#xff0c;兼具低功耗、小尺寸特性&#xff0c;性…...

杰理微蓝牙芯片AC696系列入门

1.文章背景 此篇文章以ac696n_soundbox_sdk_v1.7.0版本进行入门讲解&#xff1a; 写这篇文章的目的是因为自己在尝试入门杰理微的时候遇到了好多的问题点&#xff0c;想尝试用买到的开发板来驱动一颗LED闪烁却一直没有按自己想象的逻辑成功跑出效果&#xff0c;在网上到处翻找手…...