目录

问题

解题思路

python具体实现

题外话


问题

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。


示例 1:

nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0

示例 2:

nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5

解题思路

这个题目看到,想法,即现将两个有序数组,合并为一个有序数组,之后的中位数,就很容易实现了。实现即参考python解决双指针问题中的想法。     程序二是程序一的改进版


python具体实现

程序一:

class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""if nums1 ==[]:ans = nums2[:]elif nums1 and nums2:ans = nums1[:]count = 0for i in range(len(nums1)):if count<len(nums2):while nums2[count]<nums1[i] :ans.insert(count+i,nums2[count])count +=1if count == len(nums2):breakif i == len(nums1)-1:ans = ans+nums2[count:]breakelse:ans = nums1[:]mn = len(ans)if mn%2 == 1:return ans[mn//2]else:return (ans[mn//2]+ans[mn//2-1])/2.0

程序二

class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""ind = 0ans = nums1[:]for i in range(0,len(nums2)):while(ind<len(nums1)):if nums2[i]<=nums1[ind]:ans.insert(i+ind,nums2[i])breakelse:ind +=1if ind >=len(nums1):    #如果nums1已遍历完,则将剩下的nums2中的内容拼到nums1结尾ans = ans + nums2[i:]breakmn = len(ans)if mn%2 == 1:return ans[mn//2]else:return (ans[mn//2]+ans[mn//2-1])/2.0

题外话

这个题,看到的第一眼就感觉好熟悉,之前在学习python实现双指针问题时,遇到过,不过这次,是完全按照错误提示,一次又一次的错误中调试过来的,没有去翻之前的程序是如何实现的。好在,终于在努力下,测试通过了。测试提交记录如下图,每次提交,自己都觉得程序没有问题了,但就是有问题,由此,其实也可以看出:

编程路漫漫,吾需上下而求索!!!

对比:程序二和程序一的提交结果,可以发现,其实二者差不多,不过,程序二,确实在设计上,确实更高一筹!

LeetCode4.python实现:寻找两个有序数组中的中位数问题☆☆☆相关推荐

  1. 寻找两个有序数组中的中位数

    1.题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假设 nums1 和 n ...

  2. 用四种方法Python求出两个有序数组中的中位数

    方法一: def median_1(A, B):# 思路一: 先组合成一个有序数列,再取中位数# 时间复杂度O(m+n)len_A = len(A)len_B = len(B)C = []if len ...

  3. LeetCode(Python实现)—寻找两个有序数组的中位数

    4.寻找两个有序数组的中位数 题目大意 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). ...

  4. 求两个有序数组中的中位数和第k小的元素

    我们首先来看一下这一类题算法的原型: 对应牛客网链接: https://www.nowcoder.com/practice/08588d568e164e0a9958b5d6a3c351f5?tpId= ...

  5. 【分步详解】两个有序数组中的中位数和Top K问题

    我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...

  6. 找两个有序数组中的中位数---分治法实验1

    问题描述 设X[ 0 : n - 1]和Y[ 0 : n – 1 ]为两个数组,每个数组中含有n个已排好序的数.找出X和Y的2n个数的中位数. 编程任务 利用分治策略试设计一个O (log n)时间的 ...

  7. LeetCode4寻找两个有序数组的中位数(二分查找+分治)

    目录 1.题目 2.分析 3.代码 二分查找:绝大多数二分查找问题利用的是单调性,也有一些例外)或者题目本身蕴含的可以逐渐缩小问题规模的特性解决问题.时间复杂度log级. 分治法的设计思想是:将一个难 ...

  8. 最详解——寻找两个有序数组的中位数

    参考:[分步详解]两个有序数组中的中位数和Top K问题 题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O ...

  9. Python寻找两个有序数组的中位数

    Python寻找两个有序数组的中位数 审题: 找出意味着这是一个查找算法题 算法复杂度log级别,就是提示你是二分查找 二分查找实现一般为递归 (1)递归包括递归体 (2)终止条件 思路: 定理: 有 ...

最新文章

  1. new二维数组的几种方法
  2. 跨域请求设置withCredentials
  3. tensorflow之过拟合问题实战
  4. 存储过程里面的语句实在同一个事务中吗_事务降维的几种策略
  5. Xilinx+AWS F1+VP9带来30倍实时转码性能提升
  6. 集合——对象数组(引用数据类型数组)
  7. struts2 中文乱码问题,自定义过滤器通用解决方法
  8. php ini 长连接秒数,php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据...
  9. Java程序莫名其妙卡死的一次经历
  10. java获取泛型的类型_Java反射获取泛型类型
  11. Python-Matplotlib可视化(1)——一文详解常见统计图的绘制
  12. Java中的反射机制
  13. 安国主控AU6989SN-GTC/AU6998SN [F500] - F/W FD04 U盘量产工具无法识别方法
  14. vue音乐播放器demo,主要是模仿慕课音乐播放器教程制作的一个小demo
  15. 用Python做图片分类:前置处理,图片的缩小保存
  16. 基于spss的非线性回归(non-linear regression)
  17. 一台显示器分成双屏_双屏办公,用起来到底有多爽
  18. 清除html中table标签显示的数据,jquery – 数据清除tbody
  19. [code] PTA 胡凡算法笔记 DAY003
  20. path/filepath

热门文章

  1. nuxt服务端渲染技术
  2. Warzone: 3 (Exogen) vulnhub walkthrough
  3. typedef、#define、const和随机生成树
  4. Photoshop cc 2018基础
  5. 劳伦杰克逊写给姚明的情书:你的名字
  6. 奥斯汀大学计算机专业怎么样,美国计算机专业大学排名是怎样的?
  7. CH340G 无法识别的USB设备
  8. 详解one-hot独热编码
  9. 攻击方式 ---- SSH暴力破解
  10. tensorfow2.0实例讲解1-衣服分类