题目:给定两个大小为 m 和 n 的数组 nums1 和 nums2。
请你找出这两个有序数组的中位数
方法:很简单的办法就是利用list的函数来实现。方法如下
class Solution:
def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
nums1.extend(nums2)
nums1.sort()
length = len(nums1)
if length % 2 == 1:
return nums1[length // 2]
else:
return (nums1[length // 2] + nums1[length // 2 - 1]) / 2
这个方案当然是没有问题的,也是最简单的方法。如果没有别的要求下,这么实现是最简单的方式,也是最快的方式,对list合并排序掌握的十分合理。
我有换了一个写法,其实这个方法我感觉还不如上面的方法简单呢,当然了,这不是唯一的方法。
class Solution:
def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
lenth_all=0
n=0
m=0
if len(nums1)<len(nums2):
lenth_all=len(nums1)
n=len(nums2)-lenth_all
else:
lenth_all=len(nums2)
m=len(nums1)-lenth_all
temp=[]
for i in range((lenth_all)):
if nums1[i]>nums2[i]:
temp.append(nums2[i])
temp.append(nums1[i])
else:
temp.append(nums1[i])
temp.append(nums2[i])
if m!=0:
temp.extend(nums1[-m:])
if n!=0:
temp.extend(nums2[-n:])
length=len(temp)
if length % 2 == 1:
return temp[length // 2]
else:
return (temp[length // 2] + temp[length // 2 - 1]) / 2
print(Solution().findMedianSortedArrays([3],[-2,-1]))
发现做题其实不难,难的可能是最后的解法,我感觉上面的解法,存在的bug的,就是如果最后剩下的数,本来就没有前面的数据大,中间没有了排序,所以,这个方法显然是不可以用的,需要对这个方法进行优化,怎么来优化呢。最简单的 就是对temp组合后进行排序,
class Solution:
def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
temp=[]
for i in nums1:
temp.append(i)
for j in nums2:
temp.append(j)
for m in range(len(temp)):
for j in range(m,len(temp)):
target=temp[m]
if temp[m]<temp[j]:
temp[m]=temp[j]
temp[j]=target
length=len(temp)
if length % 2 == 1:
return temp[length // 2]
else:
return (temp[length // 2] + temp[length // 2 - 1]) / 2
print(Solution().findMedianSortedArrays([],[-2,-1]))
对第二种方案进行了优化调整。这样的时间的复杂度可能就上去了。但是慢慢去优化我们的代码,达到最佳,最简单的就是要消除可能存在的bug,再去想接下来的时间优化,当然了,肯定还有比这个最优的解法,这里知识一个抛砖引玉的。给大家一个不一样的解题方法,在刷题的过程中,我们需要优自己的思路去解决题目。目前我的刷题只是断断续续的开始,我感觉做这样的题目的时候呢,首先还是对基础知识的掌握,在一个就是我们用一个我们最熟悉的算法去解决。然后去寻找最优的算法。笨鸟先飞,可能这里笨鸟要转很多弯路才能实现我们最后的效果,但是加油,未来我们一个可以成功的。
给大家推荐一本书,这是我最近在反复看的一本书,我发现很多的时候的面试的答案能够在这本书里面找到,也帮助了我很多,在这里推荐给各位测试的小伙伴。反正他们从测试到测试开发中间经历的学习, 但是团队内还算比较系统,给我的收益很大。当然了,我推荐大家后续走测试开发,还是学习语言,我推荐大家还是使用java。我也开始转向拥抱java。可能后续的刷题,我将会改变到原来的方式去实现。python和java的实现代码都有。