给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
提示:
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[i] <= 109
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {/** 思路1:暴力法(1)双层for循环,遍历数组2,对比数组1,直到找到对应的位置(2)找到对应的位置之后,用array copy做数组拷贝时间复杂度o(m*n)思路2:指针法因为两个数组都是排序数组,所以,对比数组1和数组2末尾的位置大小,较大的就进入nums1的末尾(1)设置三个指针,一个为nums2的length,一个是nums1的length,一个是nums1的最后一个数的位置(2)while循环遍历对比两个指向数字的值,谁大谁放到nums1的末尾*/int len = m + n -1;int m1 = m-1;int n1 = n-1;while(m1 >= 0 && n1 >= 0){int tmp1 = nums1[m1];int tmp2 = nums2[n1];if(tmp1 > tmp2) {nums1[len--] = tmp1;m1--;}else{nums1[len--] = tmp2;n1--;}}System.arraycopy(nums2, 0, nums1, 0, n1 + 1);}}
