LeetCode 88. Merge Sorted Array 归并的过程

来源:互联网 发布:外国 女友 知乎 编辑:程序博客网 时间:2024/05/21 20:30

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


题意:对于有序的两个数组nums1,nums2进行归并到nums1里保持其有序性

1.按照归并排序进行归并的过程,需要单独开辟一块空间O(n),时间复杂度O(n)

2.在进行归并的过程,需要注意越界的情况,当其中之一的数组已经归并完毕,剩余的元素就是另外一个数组的元素

class Solution {public:    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {        vector<int> temp1 = nums1;           for(int i=0,j=0,k=0;i<m+n;i++)        {            if(j>=m)            {                nums1[i] = nums2[k];                k++;            }            else if(k>=n)            {                nums1[i]=temp1[j];                j++;            }            else if(temp1[j]<=nums2[k])            {                nums1[i]=temp1[j];                j++;            }            else            {                nums1[i]=nums2[k];                k++;            }                    }    }};

优化1:

1.上述代码使用了空间复杂度O(n),是因为忽略了一个条件,nums1的长度为(n+m)

2.从后往前赋值,比较归并

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


0 0
原创粉丝点击