使用递减指针在数组中插入元素?
Inserting elements within an array, with decrementing pointer?
本质上,我试图将两个排序列表合并到一个列表中。我试图尽可能有效地做到这一点。
我试图用第二个数字列表替换零,并对它们进行排序。为了时间复杂性,我试图反向合并。不幸的是,在第一个插入语句 nums1.insert(j,nums2[-1])
之后,元素 (6) 被插入倒数第二个索引,而不是最后一个索引(指针 j)。我将代码可视化,这就是我所看到的。我的预期输出(尽管我正在就地编辑数组并且不返回任何内容)是 nums1 = [1,2,2,3,5,6]
。阵列必须保持相同的容量,不能是临时的。我觉得也许我没有正确地实施插入。我可以追加值,这在第一次迭代时解决了问题,但是我可以在指针 j 减少后在数组中间追加。感谢任何 help/advice!
def merge():
nums1 = [1,2,3,0,0,0]
m = 3
nums2 = [2,5,6]
n = 3
i=m-1
j=-1
while nums2:
#last element of nums1 and nums2 compared
if nums1[i]<=nums2[-1]:
#last element of list 2 is larger than last element of list 1
nums1.pop(j)
nums1.insert(j,nums2[-1])
# pop the last value off of nums2
nums2.pop()
j-=1
#last element of nums1 and nums2 compared
if nums1[i]>=nums2[-1]:
#last element of list 2 is larger than last element of list 1
nums1.insert(j,nums1[i])
#pop off the value at current index, and replace it with the last element of nums2
nums1.pop(i)
nums1.insert(i,nums2[-1])
#pop the last value off of nums2
nums2.pop()
j-=1
i+=1
merge()
def merge(n1,m,n2,n):
k=m+n
nn=n-1
mm=m-1
for i in range(k-1,-1,-1):
if mm>=0 and nn>=0:
if n1[mm]<n2[nn]:
n1[i]=n2[nn]
nn-=1
else:
n1[i]=n1[mm]
mm-=1
elif mm>=0:
n1[i]=n1[mm]
mm=-1
else :
n1[i]=n2[nn]
nn-=1
print(n1)
nums1 = [1,2,3,0,0,0]
m = 3
nums2 = [2,5,6]
n = 3
merge(nums1,m,nums2,n)
本质上,我试图将两个排序列表合并到一个列表中。我试图尽可能有效地做到这一点。
我试图用第二个数字列表替换零,并对它们进行排序。为了时间复杂性,我试图反向合并。不幸的是,在第一个插入语句 nums1.insert(j,nums2[-1])
之后,元素 (6) 被插入倒数第二个索引,而不是最后一个索引(指针 j)。我将代码可视化,这就是我所看到的。我的预期输出(尽管我正在就地编辑数组并且不返回任何内容)是 nums1 = [1,2,2,3,5,6]
。阵列必须保持相同的容量,不能是临时的。我觉得也许我没有正确地实施插入。我可以追加值,这在第一次迭代时解决了问题,但是我可以在指针 j 减少后在数组中间追加。感谢任何 help/advice!
def merge():
nums1 = [1,2,3,0,0,0]
m = 3
nums2 = [2,5,6]
n = 3
i=m-1
j=-1
while nums2:
#last element of nums1 and nums2 compared
if nums1[i]<=nums2[-1]:
#last element of list 2 is larger than last element of list 1
nums1.pop(j)
nums1.insert(j,nums2[-1])
# pop the last value off of nums2
nums2.pop()
j-=1
#last element of nums1 and nums2 compared
if nums1[i]>=nums2[-1]:
#last element of list 2 is larger than last element of list 1
nums1.insert(j,nums1[i])
#pop off the value at current index, and replace it with the last element of nums2
nums1.pop(i)
nums1.insert(i,nums2[-1])
#pop the last value off of nums2
nums2.pop()
j-=1
i+=1
merge()
def merge(n1,m,n2,n):
k=m+n
nn=n-1
mm=m-1
for i in range(k-1,-1,-1):
if mm>=0 and nn>=0:
if n1[mm]<n2[nn]:
n1[i]=n2[nn]
nn-=1
else:
n1[i]=n1[mm]
mm-=1
elif mm>=0:
n1[i]=n1[mm]
mm=-1
else :
n1[i]=n2[nn]
nn-=1
print(n1)
nums1 = [1,2,3,0,0,0]
m = 3
nums2 = [2,5,6]
n = 3
merge(nums1,m,nums2,n)