欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1.Merge Two Sorted Arrays. py/合并排序有序数列

程序员文章站 2022-07-15 11:06:28
...

首先一些note:

  •     and在python里是and,不是&&也不是&!
  •     加成员不是add(),应该用append()。一些list方法:https://docs.python.org/3/tutorial/datastructures.html
  •     我分不清python的array和list,感觉是一个东西,*说python的基础数据结构没有array,array就是elemnet type全都一样的list。
===========================================================================
1. 如果不是两个array的长度加起来超过了一百万的话,直接用builtin sort 会比较快。1.Merge Two Sorted Arrays. py/合并排序有序数列
$ python make-figures.py --nsublists 2 --maxn=0x100000 -s merge_funcs.merge_26 -s merge_funcs.sort_builtin

*地址:Combining two sorted lists in Python


=============================================================================

2.我的想法:

    因为两个array都是顺序排列的,所以只需要把A的每一个成员和选中的B成员比,然后再加入新的result list C中就可以了。

    详细一点:

            先把A里面的每个数和B比较,如果A[i]<B[j]的话我们就一直加A[i]到result里,一直加到A[i]>=B[j]。

            这个时候就把B[j]加进result,再把B[j]往后移一位,继续用A[i]和它比。

            重复此步骤直到两个array中的一个( 最佳情况是两个一起)被loop完了。

            如果是只有其中一个被loop完了,就说明另外一个剩下的数肯定比result里的都大。直接加进去就好了。

class Solution:
    """
    @param A: sorted integer array A
    @param B: sorted integer array B
    @return: A new sorted integer array
    """
    def mergeSortedArray(self, A, B):
        # write your code here
        if not A:
            return B
        elif not B: 
            return A;
        
        result = []
        i,j = 0, 0
        
        while (i < len(A) and j < len(B)):
            if (A[i] < B[j]):
                result.append(A[i])
                i+=1;
            else:
                result.append(B[j])
                j+=1;
        
        while i < len(A):
            result.append(A[i])
            i+=1;
            
        while j < len(B): 
            result.append(B[j])
            j+=1;

        return result;
============================================================================


    这两者都应该不是最优解