python# coding:utf-8
# 关键点:有序数组、去0、
# 核心思路:m or n =0的就不考虑了 nums1.length = m+n nums2.length = n
def merge(nums1, m, nums2, n):
# 思路:将nums1和nums2中的0去掉,然后合并,进行排序
if len(nums1) != m:
for i in range(len(nums1) - m):
nums1.remove(0)
if len(nums2) != n:
for i in range(len(nums2) - n):
nums2.remove(0)
nums1 += nums2
nums1.sort()
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
merge(nums1, m, nums2, n)
参照链接 方法:按照链接的来写代码,不看他写好的,然后总结自己出现的问题
python# coding:utf-8
# 逆向双指针的解法
# 题目给出return nothing,代表着要原地修改,将空间复杂度降低为o(1)
# 原地修改时,为避免从前往后遍历导致原有数组元素被破坏掉,我们要选择从后往前遍历,
# 自己按照图谱出现问题的地方:
# 1. 边界条件考虑清楚:i和j都小于0
# 2. 临界情况,当j=-1的时候,或者i=-1,要特殊处理一下,避免出现index out of的报错
# 3. 其他按照互相比大小,然后赋值给nums1的元素
def merge(nums1, m, nums2, n):
# 设 i为nums1的指针,指向最后一个元素,j为nums2的指针,指向最后一个元素,k指向nums1最后一个元素(0)
i, j = m - 1, n - 1
k = len(nums1) - 1
while j >= 0 or i >= 0:
if j==-1:
nums1[k] = nums1[i]
i -= 1
elif i == -1:
nums1[k] = nums2[j]
j-=1
elif nums1[i] >= nums2[j]:
nums1[k] = nums1[i]
i -= 1
elif nums1[i] < nums2[j]:
nums1[k] = nums2[j]
j -= 1
k -= 1
print(nums1)
nums1 = [1,2,3,0,0, 0]
m = 3
nums2 = [4,5,6]
n = 3
merge(nums1, m, nums2, n)
本文作者:Eric
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!