LeetCode c++-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,也就是原来的数组,不能使用额外的空间。并且nums1具有足够大的空间,因此最简单的方法就是从后往前排,然后nums1[m+n-1]开始往前存数据,存的是nums1[i]和nums2[j]中较大的数。

代码如下:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
   
int i = m - 1, j = n - 1, tar = m + n - 1;
        while (j >= 0) {
            nums1[tar--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
        }
    }
};

对于排完后剩下的是nums1还是nums2,这里判断的非常巧妙:

首先如果排完后,还剩下nums1,那么不用处理,因为nums1就是结果中的一部分。

如果剩下nums2,也就是while的判断,i是小于0的,那么这样就直接是赋值nums2[j--]。


posted on 2018-04-04 15:46  sichenzhao  阅读(91)  评论(0编辑  收藏  举报

导航