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--]; 
        } 
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容