题目
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
分析
题目要求给两个已经排好序的数组nums1和nums2,数据量分别为m和n,并且数组nums1的长度>=m+n,要将nums2的数据合并到nums1中
一开始的想法是建立一个新的数组,然后将数组12的数分别拿出来一一比对,小的放进新数组种,但是题目给的函数并没有返回值,也就是说,不要新建一个数组(但是我觉得新建一个数组,最后将数据复制进nums1应该也是可以的吧),要将数据直接放到数组1中,为了不影响数组1中原来的数据所以我们从尾部开始,也就是从大开始向小排
循环判断了ia&&ib还有ib,为什么没有判断ia的情况呢,因为ia&&ib为假的情况,要么就是ia已经判断完了,要么是ib判断玩了,因为是直接插入到数组1中的,所以ib判断完了,也就完了,不需要再判断ia
代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int ia=m-1, ib=n-1, iab=m+n-1;
while(ia>=0 && ib>=0){
nums1[iab--] = nums1[ia]>nums2[ib] ? nums1[ia--] : nums2[ib--];
}
while(ib>=0){
nums1[iab--] = nums2[ib--];
}
}
};
网友评论