1.题目:合并两个有序升序的整数数组A和B变成一个新的数组。新数组也要有序。
思路:相当于两指针,分别指向两数组头,开始比较,小的数就存入空数组res,直到其中一个指针指向数组末尾,也就是 n>A数组的长度,既可以将剩下的B数组直接存入res,或者m>B数组的长度,就将剩余的A直接存入res
代码:
def getall(A,B):
def getall(A,B):
n=0
m=0
res=[]
for i in range(len(A)+len(B)):
#print(i)
if n>=len(A):
res.append(B[m])
#print("1:",res)
m = m+1
#注意判断完是否超出数组长度要用continue跳出循环,不然会继续判断下面A[n]和B[m]大小,此时若n超出数组长度则会报错list index out of range
continue
if m>=len(B):
res.append(A[n])
#print("2:",res)
n = n+1
continue
if A[n]<=B[m]:
res.append(A[n])
n=n+1
#print("3:",res)
else:
res.append(B[m])
m=m+1
#print("4:",res)
i = i+1
return res
print(getall([1,2,3,4,5],[1,2,5,6,8,]))
如果想合并判断语句写成 if (m>len(B) or A[n]<B[m]) and n<len(A):
也会报错list index out of range,因为跟前面不加continue跳出循环一样,or先判断m>len(B),再判断A[n]<B[m],这时当m>len(B)为真时,B[m]就超出数组范围
当然如果使用numpy库就更简单了,直接合并两个数组,然后进行排序
import numpy
class Solution:
def mergeSortedArray(self, A, B):
for i in range(len(B)):
A.append(B[i])
print(A)
i = i+1
#return A
c = numpy.sort(A)
c = list(c)
return c
q = Solution()
print(q.mergeSortedArray([1,2,3],[1,2,4,6,8]))