題目
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--];
}
}
};