LeetCode4.python实现:寻找两个有序数组中的中位数问题☆☆☆
目录
问题
解题思路
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.题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假设 nums1 和 n ...
- 用四种方法Python求出两个有序数组中的中位数
方法一: def median_1(A, B):# 思路一: 先组合成一个有序数列,再取中位数# 时间复杂度O(m+n)len_A = len(A)len_B = len(B)C = []if len ...
- LeetCode(Python实现)—寻找两个有序数组的中位数
4.寻找两个有序数组的中位数 题目大意 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). ...
- 求两个有序数组中的中位数和第k小的元素
我们首先来看一下这一类题算法的原型: 对应牛客网链接: https://www.nowcoder.com/practice/08588d568e164e0a9958b5d6a3c351f5?tpId= ...
- 【分步详解】两个有序数组中的中位数和Top K问题
我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...
- 找两个有序数组中的中位数---分治法实验1
问题描述 设X[ 0 : n - 1]和Y[ 0 : n – 1 ]为两个数组,每个数组中含有n个已排好序的数.找出X和Y的2n个数的中位数. 编程任务 利用分治策略试设计一个O (log n)时间的 ...
- LeetCode4寻找两个有序数组的中位数(二分查找+分治)
目录 1.题目 2.分析 3.代码 二分查找:绝大多数二分查找问题利用的是单调性,也有一些例外)或者题目本身蕴含的可以逐渐缩小问题规模的特性解决问题.时间复杂度log级. 分治法的设计思想是:将一个难 ...
- 最详解——寻找两个有序数组的中位数
参考:[分步详解]两个有序数组中的中位数和Top K问题 题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O ...
- Python寻找两个有序数组的中位数
Python寻找两个有序数组的中位数 审题: 找出意味着这是一个查找算法题 算法复杂度log级别,就是提示你是二分查找 二分查找实现一般为递归 (1)递归包括递归体 (2)终止条件 思路: 定理: 有 ...
最新文章
- new二维数组的几种方法
- 跨域请求设置withCredentials
- tensorflow之过拟合问题实战
- 存储过程里面的语句实在同一个事务中吗_事务降维的几种策略
- Xilinx+AWS F1+VP9带来30倍实时转码性能提升
- 集合——对象数组(引用数据类型数组)
- struts2 中文乱码问题,自定义过滤器通用解决方法
- php ini 长连接秒数,php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据...
- Java程序莫名其妙卡死的一次经历
- java获取泛型的类型_Java反射获取泛型类型
- Python-Matplotlib可视化(1)——一文详解常见统计图的绘制
- Java中的反射机制
- 安国主控AU6989SN-GTC/AU6998SN [F500] - F/W FD04 U盘量产工具无法识别方法
- vue音乐播放器demo,主要是模仿慕课音乐播放器教程制作的一个小demo
- 用Python做图片分类:前置处理,图片的缩小保存
- 基于spss的非线性回归(non-linear regression)
- 一台显示器分成双屏_双屏办公,用起来到底有多爽
- 清除html中table标签显示的数据,jquery – 数据清除tbody
- [code] PTA 胡凡算法笔记 DAY003
- path/filepath