$ python make-figures.py --nsublists 2 --maxn=0x100000 -s merge_funcs.merge_26 -s merge_funcs.sort_builtin
首先一些note:
- and在python里是and,不是&&也不是&!
- 加成员不是add(),应该用append()。一些list方法:https://docs.python.org/3/tutorial/datastructures.html
- 我分不清python的array和list,感觉是一个东西,stackoverflow说python的基础数据结构没有array,array就是elemnet type全都一样的list。
===========================================================================
1. 如果不是两个array的长度加起来超过了一百万的话,直接用builtin sort 会比较快。
StackOverFlow地址: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;
============================================================================
这两者都应该不是最优解