要求把2中元素加入到1中并且最后是有序的
解题思路:
?一、直接把2中元素加入到1中元素后面在排序
nums1[m:]=nums2 #将1中元素后面的0替换为2中元素
nums1.sort() #对整体排序
二、设置两个指针,在借助一个空列表,对1和2从第一个元素开始比较大小,把小的放进列表中,遍历完1,2数组后,将排好序的列表赋给1
ls = []
p1 ,p2 =0,0
while p1 <m or p2<n : #将元素比较大小合并到一个
if p1 ==m: #nums1没有了,就把2中的加入
ls.append(nums2[p2])
p2+=1
elif p2==n: #nums2没有了,就把1中的加入
ls.append(nums1[p1])
p1+=1
elif nums1[p1] < nums2[p2]:
ls.append(nums1[p1])
p1+=1
else:
ls.append(nums2[p2])
p2+=1
nums1[:]=ls #对nums1从头进行切片,把ls赋给它
三、设置两个指针,由于1中m后面是空,可以随意赋值,就可以直接在1上进行元素的加入排序
将1和2中的最大值作比较,就是最后一个元素比较,大的放到1中最后位置,每放一次,更新1中最后位置,直到1和2都从后往前遍历结束,顺序就排好了
p1 = m-1 #1中末尾元素,
p2 = n-1 #2中末尾元素
p = m+n-1 #定义1中最后一个元素位置
while p1>=0 or p2>=0:
if p1<0:
nums1[p] = nums2[p2] #1中没有了,加入2
p2-=1
elif p2<0:
nums1[p] = nums1[p1] #2中无了,加入1
p1-=1
elif nums1[p1]<nums2[p2]:
nums1[p] = nums2[p2]
p2-=1
else:
nums1[p] = nums1[p1]
p1-=1
p-=1 #更新末尾位置
|