题目
给你两个有序整数数组
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) {
int i = 0 ;
int j = 0;
// 复制nums1至tmp数组
int[] tmp = new int[m];
for(int a = 0 ; a < m ; a++){
tmp[a] = nums1[a];
}
int index = 0;
while(i < m || j < n){
if(i >= m){
nums1[index++] = nums2[j++];
continue;
}
if(j >= n){
nums1[index++] = tmp[i++];
continue;
}
if(tmp[i] <= nums2[j]){
nums1[index++] = tmp[i++];
}else{
nums1[index++] = nums2[j++];
}
}
}
}
总结
本篇文章讲解了算法题目的思路和解法,代码和笔记由于纯手打,难免会有纰漏,如果发现错误的地方,请第一时间告诉我,这将是我进步的一个很重要的环节。以后会定期更新算法题目以及各种开发知识点,如果您觉得写得不错,不妨点个关注,谢谢。