88. Merge Sorted Array

題目

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--]; 
        } 
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容