题目描述:
给定两个有序数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。
说明:
- 初始化nums1和nums2的元素数量分别为m和n
- 假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素
算法思路:
一般而言,对于有序数组可以通过双指针法达到O(n+m)的时间复杂度
最直接的算法实现是将指针p1置为nums1的开头,p2为nums2的开头,在每一步将最小值放入输出数组中。由于nums1是用于输出的数组,需要将nums1中的前m个元素放在其他地方,也就需要O(m)的空间复杂度。
算法java实现:
class Solution {
public void merge(int [] nums1, int m, int[] nums2, int n) {
//赋值nums1
int[] nums1_copy = new int[m];
System.arraycopy(nums1, 0, nums1_copy, 0, m);
//nums1_copy的指针
int p1 = 0;
//nums2的指针
int p2 = 0;
//nums1的指针
int p