我找到了解决该问题的部分方法;但是,似乎我从数组中获得了多余的数字。这是我要找出的问题:
给出两个已排序的整数数组nums1和nums2,将nums2合并为 nums1作为一个排序数组。
注意:
在nums1和nums2中初始化的元素数是m和n 分别。您可以假设nums1有足够的空间(大小为 大于或等于m + n)以容纳nums2中的其他元素。 示例:
输入:nums1 = [1,2,3,0,0,0],m = 3 nums2 = [2,5,6],n = 3
输出:[1,2,2,3,5,6]
我正在练习一些关于Python3语言的编码挑战,并准备接受采访。我尝试了一些方法,例如在数组的开头为0时使用pop。但是似乎在出现新的测试用例之后,我应该期望更多。我的语言很新。
def mergeArrays(nums1, m, nums2, n):
nums1[:] = sorted(nums1 + nums2)
i = 0
while (i < len(nums1[:-1])):
if nums1[i] is 0:
nums1.pop(i)
if i > len(nums1):
break
i += 1
print(nums1)
nums1 = [-49,-48,-48,-47,-45,-42,-39,-36,-33,-33,-28,-28,-23,-23,-7,-4,-3,0,0,4,6,21,29,29,31,34,36,38,40,43,45,46,47,0,0,0,0,0,0,0,0]
m = len(nums1)
nums2 = [-16,-5,-3,26,33,35,38,41]
n = len(nums2)
mergeArrays(nums1, m, nums2, n);
我的预期输出应该是两个数组都经过排序并通过。结果应为:[-49,-48,-48,-47,-45,-42,-39,-36,-33,-33,-28,-28,-23,-23,-16,-7,-5,-4,-3,-3,0,0,4,6,21,26,29,29,31,33,34,35,36,38,38,40,41,43,45,46,47]
但是,我得到了两个额外的零,看起来应该像这样:
[-49,-48,-48,-47,-45,-42,-39,-36,-33,-33,-28,-28,-23,-23,-16,-7,-5,-4,-3,-3,0,0,0,0,0,4,6,21,26,29,29,31,33,34,35,36,38,38,40,41,43,45,46,47]
编辑:添加了更多信息以使问题清楚。
答案 0 :(得分:0)
根据我的理解,您希望对两个排序后的数组进行排序而没有任何重复的元素。您可以参考以下代码:
first_list = [-49,-48,-48,-47,-45,-42,-39,-36,-33,-33,-28,-28,-23,-23,-7,-4,-3,0,0,4,6,21,29,29,31,34,36,38,40,43,45,46,47,0,0,0,0,0,0,0,0]
second_list = [-16,-5,-3,26,33,35,38,41]
merged_list = list(set(first_list+second_list))
merged_list.sort()
print(merged_list)
答案 1 :(得分:0)
我使用的一种旧方法是循环理解。基本上,我所做的就是从头到尾进行数组拼接,并在循环内部进行排序:
def mergeArrays(nums1, m, nums2, n):
nums1[0: m + n] = [x for x in sorted(nums1[:m] + nums2[:n])]
如果您的解释与我刚才的解释不同,请放心:)
答案 2 :(得分:0)
反复研究代码的意图以及不需要的神秘零值的来源之后,您似乎想执行以下操作:对两个数组进行合并排序,保留重复项:
您的输入是nums1, nums2
数组,它们填充了零,并且可以分别长于长度m,n。
0..(m-1)
,即nums1[:m]
,同样引用nums2[:n]
nums1[:-1]
您的解决方案是:sorted(nums1[:m] + nums2[:n])
。这是一种单列列表理解,您不需要功能。
x for x in sorted(nums1[:m] + nums2[:n]) if x != 0]