Leetcode(4)寻找两个有序数组的中位数
2024-09-01 11:53:26
Leetcode(4)寻找两个有序数组的中位数
[题目表述]:
给定两个大小为 m 和 n 的有序数组 nums1 和* nums2*。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
第一种方法:list拼接排列取中位数
执行用时:116 ms ; 内存消耗:11.8MB 效果:还行
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
nums1.extend(nums2)
sort_nums1=sorted(nums1)
number=len(sort_nums1)
if number%2==1 :
average_nums=sort_nums1[number/2]
else: average_nums=float((sort_nums1[number/2]+sort_nums1[number/2-1]))/2
return average_nums
学习
整数/2在leetcode上 取整有点迷
分奇偶情况
第二种方法:归并排序
执行用时:124 ms; 内存消耗:11.8MB
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
number=len(nums1)+len(nums2)
end=number/2+1
p1,p2=0,0
res=[]
while p1 < len(nums1) or p2 < len(nums2):
if p1 >= len(nums1):
res.append(nums2[p2])
p2 += 1
elif p2 >= len(nums2):
res.append(nums1[p1])
p1 += 1
else:
num1, num2 = nums1[p1], nums2[p2]
if num1 <= num2:
res.append(num1)
p1 += 1
else:
res.append(num2)
p2 += 1
if len(res) == end:
if number%2==1 :
mid=res[-1]
else:
mid=(res[-1]+res[-2])*1.0/2
return mid
学习
- 对于已经排列好的数组,使用归并排序合并两个数组再找很好
最新文章
- cesium核心类Viewer简介
- js 函数返回函数
- hibernate开发(1)
- spring.net tx:advice 和 aop:config 配置事务 匹配名字的方法管理事务
- android-GridView控件的使用
- 开启Github之旅
- foreach 相关
- Knockoutjs官网翻译系列(一)
- WPF资源字典使用
- BZOJ 1497: [NOI2006]最大获利( 最大流 )
- RH033读书笔记(16)-Lab 17 Installation and Administration Tools
- 开源文档管理系统LogicalDOC测试报告---安装篇
- HTML中的Hack条件注释语句
- macbook 入门
- 创建、使用SpringBoot项目
- cp2102 驱动 win7x64 -2018
- _killerstreak
- java实时监听日志写入kafka(转)
- 免费桌面视频录像工具OBS的简单操作介绍
- Unity3D笔记 愤怒的小鸟<;二>; 实现Play界面