前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >刷题-给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数

刷题-给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数

作者头像
雷子
发布2021-03-15 16:18:14
8390
发布2021-03-15 16:18:14
举报
文章被收录于专栏:雷子说测试开发
代码语言:javascript
复制
题目:给定两个大小为 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合并排序掌握的十分合理。

我有换了一个写法,其实这个方法我感觉还不如上面的方法简单呢,当然了,这不是唯一的方法。

代码语言:javascript
复制
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组合后进行排序,

代码语言:javascript
复制
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的实现代码都有。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档