要求原地合并,我的做法比较复杂,双指针,比较i和j位置的值,若i位置值大于j位置值,则互换,并对j位置值排序,代码为:
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
if not nums2:
return
i = 0
j = 0
while i < m and nums1:
if nums1[i] <= nums2[j]:
i += 1
else:
temp = nums1[i]
nums1[i] = nums2[j]
nums2[j] = temp
i += 1
temp = j
if n == 1:
continue
while(nums2[temp]>nums2[temp+1]):
temp_num = nums2[temp]
nums2[temp] = nums2[temp + 1]
nums2[temp+1] = temp_num
temp += 1
if temp >= n - 1:
break
while(j < n):
nums1[i] = nums2[j]
i += 1
j += 1
大佬的解法比较好,从后往前,先比较两者后端,大的放nums1最后