zoukankan      html  css  js  c++  java
  • LeetCode 4. Median of Two Sorted Arrays & 归并排序

    Median of Two Sorted Arrays

    搜索时间复杂度的时候,看到归并排序比较适合这个题目。中位数直接取即可,所以重点是排序。

    再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列

    by 图解排序算法(四)之归并排序

    第1次提交
    class Solution:
        def findMedianSortedArrays(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: float
            """
            # merge sort
            #print("start merge sort")
            l1=len(nums1)
            l2=len(nums2)
    
            # median size
            if (l1+l2)%2==0:
                #length==4 4/2=2, [1,2] is index
                median1=(l1+l2)//2-1
                median2=(l1+l2)//2
            else:
                # length==3 3//2=1, [1,1] is index
                median1=(l1+l2)//2
                median2=median1
    
            mergeList=[]
            
            # two arrays' cursor
            i=0
            j=0
    
            # median flag
            medianFlag=False
    
            while i<l1:
                try:
                    if nums1[i]<=nums2[j]:
                        mergeList.append(nums1[i])
                        i+=1
                    else:
                        mergeList.append(nums2[j])
                        j+=1
                    # find size
                    if len(mergeList)>median2:
                        break
                except:
                    break
    
            # continue surplus, except find
            while i<l1 and not medianFlag:
                mergeList.append(nums1[i])
                i+=1
    
            while j<l2 and not medianFlag:
                mergeList.append(nums2[j])
                j+=1
                
            #print(" median : ",median1,median2)
            return (mergeList[median1]+mergeList[median2])/2
            
    
    if __name__ == "__main__":
        nums1 = [1, 3]
        nums2 = [2]
        data = [
            {
                'n1':[1, 3],
                'n2':[2],
                'result':2.0
            },
            {
                'n1':[1, 2],
                'n2':[3, 4],
                'result':2.5
            }
        ];
        for d in data:
            print(d)
            result=Solution().findMedianSortedArrays(d['n1'],d['n2'])
            print(result)
            if result==d['result']:
                print("--- ok ---")
            else:
                print("--- error ---")
            
    

    哇,一次成功不带调试感觉很美妙,(hard也没那么难哈) 多亏那个博主图画的好,看个图就很明白了。很清晰。

    总结:归并排序感觉实用性不是很强,不知道经常应用在什么情境下,有了分解才是再分治才是排序?

    【好记性不如烂笔头】分冶算法之归并排序

  • 相关阅读:
    angularJS解决数据显示闪一下的问题?-解决办法
    js 做账单处理
    淘宝cnpm
    js 对象转数组
    js 移动端上拉刷新(基于ng1)
    js 控制超出字数显示省略号
    select2 插件编辑时设置默认值
    select2 插件加载后端数据
    js 依据“;”折行
    css 两段对齐和超出部分...
  • 原文地址:https://www.cnblogs.com/warcraft/p/9354486.html
Copyright © 2011-2022 走看看