【LeetCode】- Merge Sorted Array

1、题目描述

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

  • Note:

The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
Example:

Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3

Output: [1,2,2,3,5,6]

2、问题描述:

  • 合并两个排好序的数组,其中第一个数组的长度可以包含两个数组,不开辟外的空间,从小到大排序。

3、问题关键:

  • 考虑将数组从后往前排序,将最大的放在最后,一直排到第一个。

4、C++代码:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int k = m + n - 1;//merge后的数组元素的最后一个下标。
        m --, n --;//两个数组的最后一个元素的下标。
        while (m >= 0 && n >= 0) {
            if (nums1[m]  < nums2[n]) {
                nums1[k --] = nums2[n --];//每次就将最大的元素放在最后面。
            }
            else {
                nums1[k --] = nums1[m --];
            }
        }
        while(n >= 0) //由于是将第二个数组放到,第一个,只需要判断第二个数组是否全放过来了。
           nums1[k --] = nums2[n--];
    }
};
    原文作者:邓泽军_3679
    原文地址: https://www.jianshu.com/p/798f420eda19
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞