解法1:直接合并后排序
nums1[m:]=nums2
nums1.sort()
解法2:双指针
实现思路:
- 从nums1和num2的尾部往头部开始遍历,每次取两者中较大元素放入num1的最后面
len1 = m-1 // 开始索引
len2 = n-1
tail = m+n-1 // num1末尾
while len1>=0 or len2 >=0:
if num1[len1]>num2[len2]:
num1[len]=num1[len1]
len1-=1
elif num1[len1]< num2[len2]:
num1[len]=num2[len2]
len2-=1
// 当前nums1的索引减1
len -=1
// 如果nums2没有遍历完,则继续遍历
while len2>=0:
nums[len] =nums2[len2]
len2-=1
len-=1
// 如果num1没有遍历完,无须在意,剩下的前部分数据就是有序的
return nums1
有序数组的归并是双指针经典问题
// 通用方法
// arr1[] 和 arr2[]有序,建立一个新数组arr[] ,长度为len(arr1)+len(arr2)
// 循环遍历arr1和arr2
依次比较arr1和arr2的元素,若arr1[i]>arr2[j],则将较大的元素存入arr[]
指针向后移
`arr[index]=arr1[i] i++ index++`
// 若arr1(arr2)还有剩余元素,则直接存入arr尾部
`while i<len(arr1): arr[index]=arr1[i] i++ index++