题目描述
题意解析
将两个有序数组进行合并,合并为一个新的有序数组,结果直接存储在原第一个数组中。
思路分析
采用双指针方法,假设p1和p2分别为数组nums1和nums2的当前元素的下标,我们只需要比较nums1[p1]和nums2[p2]的大小即可,将较小的值存入一个新的数组中,最终当两个数组中某个到达最后时,将另一个数组的值全部接入新数组的后面即可。
代码
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int ans[] = new int[n + m];
int cur1 = 0, cur2 = 0;
int cur = 0;
while(cur1!=m && cur2!=n){
if(nums1[cur1] < nums2[cur2]) ans[cur++] = nums1[cur1++];
else ans[cur++] = nums2[cur2++];
}
if(cur1!=m)
while(cur1!=m)
ans[cur++] = nums1[cur1++];
if(cur2!=n)
while(cur2!=n)
ans[cur++] = nums2[cur2++];
for(int i=0;i<m+n;i++) nums1[i] = ans[i];
}
}