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

网站开发外包各种网站

网站开发外包,各种网站,公司的网站建设计入什么科目,湖南做旅游网站哪家最好4. 寻找两个正序数组的中位数 给定两个大小分别为 m m m 和 n n n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O ( l o g ( m n ) ) O(log (mn)) O(log(mn)) 。 示例 1:…

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

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

算法的时间复杂度应该为 O ( l o g ( m + n ) ) O(log (m+n)) 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

算法思路分析

该代码通过 二分排除法 在两个有序数组中高效寻找中位数,核心思路是逐步缩小搜索范围,每次排除约一半的不可能元素,确保时间复杂度为 O ( l o g ( m + n ) ) O(log(m+n)) O(log(m+n))。具体步骤如下:

算法步骤

  1. 确定中位数位置:
    • 若总长度 m+n 为奇数,中位数为第 k = (m+n+1)//2 小的元素。
    • 若为偶数,中位数为第 k = (m+n)//2 和 k+1 小元素的平均值。
  2. 递归排除法寻找第k小元素:
    • 初始化指针: index1index2 分别表示两个数组的当前起始位置。
    • 边界处理:
      • 若一个数组已全部排除,直接取另一数组的第 k 个元素。
      • k=1,返回两数组当前起始元素的最小值。
    • 计算比较点: 取两数组的 k//2-1 位置元素(若越界则取末尾)。
    • 排除较小部分: 比较两比较点,排除较小值所在数组的前 k//2 个元素,并更新 k 和对应数组的起始索引。

关键点

  • 二分排除策略: 每次排除约 k/2 个不可能元素,缩小问题规模。
  • 越界处理: 通过 min 函数确保比较点不越界,避免无效访问。
  • 动态调整k值: 每次排除后,k 减去已排除元素的数量,确保后续搜索正确。
  • 奇偶处理: 根据总长度奇偶性,灵活调用查找函数。

复杂度分析

  • 时间复杂度: O ( l o g ( m + n ) ) O(log(m+n)) O(log(m+n))
    每次循环排除约一半元素,最多执行 log(m+n) 次。

  • 空间复杂度: O ( 1 ) O(1) O(1)
    仅使用固定数量的变量,无额外空间消耗。

算法代码

class Solution:def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:def getKthElement(k):index1, index2 = 0, 0  # 初始化两个数组的起始索引while True:# 处理边界:若一个数组被完全排除,直接取另一数组的第k个元素if index1 == m:return nums2[index2 + k - 1]if index2 == n:return nums1[index1 + k - 1]# 当k=1时,只需比较当前索引处的最小值if k == 1:return min(nums1[index1], nums2[index2])# 计算新的比较点,防止越界newIndex1 = min(index1 + k // 2 - 1, m - 1)newIndex2 = min(index2 + k // 2 - 1, n - 1)pivot1, pivot2 = nums1[newIndex1], nums2[newIndex2]# 排除较小值所在数组的前半部分if pivot1 <= pivot2:k -= newIndex1 - index1 + 1  # 更新剩余k值index1 = newIndex1 + 1       # 移动起始索引else:k -= newIndex2 - index2 + 1index2 = newIndex2 + 1m, n = len(nums1), len(nums2)totalLength = m + n# 根据总长度奇偶性决定中位数计算方式if totalLength % 2 == 1:return getKthElement((totalLength + 1) // 2)else:return (getKthElement(totalLength // 2) + getKthElement(totalLength // 2 + 1)) / 2

在这里插入图片描述

http://www.dtcms.com/wzjs/447513.html

相关文章:

  • wordpress编辑网站株洲seo
  • 公司网站优化要怎么做百度站长平台app
  • 云南专业做网站多少钱商洛网站建设
  • 平谷做网站网站推广优化服务
  • 四川学校网站建设怎么自己弄一个平台
  • 重庆优化seo免费seo教程资源
  • 做网站怎么兼职百度推广官网
  • 织梦网站导入链接怎么做怎么建立自己的网页
  • 企业网站 手机站百度竞价员
  • 网站开发建设费用明细自媒体平台app
  • 新手做网站需要哪些教材国内建站平台有哪些
  • 月嫂公司网站建设构思好的推广平台
  • 上海定制网站建设费用搜索引擎营销例子
  • 深圳seo公司助力网络营销飞跃seo分析工具
  • 石家庄网站设计制作萧山区seo关键词排名
  • 网络构建是什么快速seo关键词优化技巧
  • 做网站的需求是吗活动推广文案
  • 网站开发毕设推广公司品牌
  • 深圳极速网站建设推荐北京seo专员
  • 连云港 网站 建设百度竞价排名正确解释
  • 厦门哪家做网站好seo排名谁教的好
  • 周口规划建设局网站快手流量推广网站
  • 英文网站建设注意什么微信朋友圈广告投放
  • 做电影网站侵权重庆做网络优化公司电话
  • 网站编辑做的准备成都新闻今日最新消息
  • word做网站使用网站模板快速建站
  • 企业建站程序有哪些seo在线外链
  • 昆明做网站建设有哪些网站点击量查询
  • 南京建设网站首页qq群排名优化软件
  • 怎么做新网站的推广百度会员登录入口