【Leetcode】Merge Sorted Array
@(Leetcode)
题目链接:
https://leetcode.com/problems/merge-sorted-array/description/
思路:
将数组nums2归并进nums1里面,两个数组都是排好序的,有点归并排序的意思。设置3个index,index为结果、idx_1为nums1的,idx_2为nums2的。这题主要注意三个点:
1. 因为要把结果放到原来的数组num1里面,避免num1里面的元素被覆盖,所以index从后往前遍历。
2. 遍历的时候,idx_1或者idx_2小于0停止,另外一个idx不为0的要继续遍历。也就是说先遍历2个nums,然后遍历剩下的一个nums。
3. m= 0, n= 0情况的处理。
我的AC代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
if (m== 0) {
for (int i= 0; i< n; i++) {
nums1[i]= nums2[i];
}
return;
}
if (n== 0) return;
int idx_1= m- 1;
int idx_2= n- 1;
int index= m+ n- 1;
while (idx_1>= 0&& idx_2>= 0) {
if (nums1[idx_1]> nums2[idx_2]) {
nums1[index]= nums1[idx_1];
idx_1--;
} else {
nums1[index]= nums2[idx_2];
idx_2--;
}
index--;
}
if (idx_1< 0) {
for (int i= index; i>= 0; i--) {
nums1[i]= nums2[idx_2];
idx_2--;
}
} else if (idx_2< 0) {
for (int i= index; i>= 0; i--) {
nums1[i]= nums1[idx_1];
idx_1--;
}
}
return;
}
};
PS:感觉自己写的还是太繁琐,应该会有更加简单优美的写法,希望能好好学习下。