leetcode88---Merge Sorted Array(合并有序数组)

原创 2016年01月14日 18:03:53

问题描述:

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.

两个有序数组A[],B[],假设A有足够空间,将两个数组合并到A中,使之有序。

问题求解:

方法一:从后往前遍历两数组(尾插法),将大的放在后面,无需另外开辟空间,时间复杂度度O(m+n)。

class Solution {
public://时间复杂度O(m+n)
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int index = m+n-1;//合并后数组索引
        int aindex = m-1;//a数组索引
        int bindex = n-1;//b数组索引
        while(aindex >= 0 && bindex >= 0)
        {//从后往前遍历,把最大的放在最后面
            if(nums1[aindex] > nums2[bindex])
            {
                nums1[index--] = nums1[aindex--];
            }
            else
            {
                nums1[index--] = nums2[bindex--];
            }
        }
        while(aindex >= 0)
        {
            nums1[index--] = nums1[aindex--];
        }
        while(bindex >= 0)
        {
            nums1[index--] = nums2[bindex--];
        }
    }
};

更简洁一点:

class Solution {
public://时间复杂度O(m+n)
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int index = m+n-1;//合并后数组索引
        int aindex = m-1;//a数组索引
        int bindex = n-1;//b数组索引
        while(aindex >= 0 && bindex >= 0)
        {//从后往前遍历,把最大的放在最后面
            nums1[index--] = nums1[aindex]>nums2[bindex]?nums1[aindex--]:nums2[bindex--];
        }
        while(aindex >= 0)
        {
            nums1[index--] = nums1[aindex--];
        }
        while(bindex >= 0)
        {
            nums1[index--] = nums2[bindex--];
        }
    }
};

方法二:从前往后遍历数组,需要另开辟一个临时数组,不如方法一更优。

class Solution {
public://时间复杂度O(m+n) 空间复杂度O(m+n)
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int index = 0;//合并后数组索引
        int aindex = 0;//a数组索引
        int bindex = 0;//b数组索引
        int tmp[m+n];//开辟一个临时数组
        while(aindex < m && bindex < n)
        {//从前往后
            tmp[index++] = nums1[aindex]<nums2[bindex]?nums1[aindex++]:nums2[bindex++];
        }
        while(aindex < m)
        {
            tmp[index++] = nums1[aindex++];
        }
        while(bindex < n)
        {
            tmp[index++] = nums2[bindex++];
        }
        //将临时数组的数放到a数组
        while(--index >= 0)
        {//因为前面index++完后index多加一次,因此首先要--index
            nums1[index] = tmp[index];
        }
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LeetCode 88 Merge Sorted Array(合并排序数组)(*)

翻译给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。批注: 你可以假设nums1中有足够的空间(空间大于或等于m+n)来存放来自nums2的额外元素。 num...
  • NoMasp
  • NoMasp
  • 2016年01月24日 12:06
  • 3690

(数组)leetcode 88:Merge Sorted Array

(数组)leetcode 88:Merge Sorted Array

Leetcode刷题记——88. Merge Sorted Array(合并有序数组)

一、题目叙述: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted...

88. Merge Sorted Array 合并两个数组

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

LeetCode 88. Merge Sorted Array 归并的过程

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. 题意:对于...

[LeetCode]--88. Merge Sorted Array

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

[leetcode]88. Merge Sorted Array (java)

题目描述: Merge two sorted linked lists and return it as a new list. The new list should be made by sp...

Leetcode 88. Merge Sorted Array

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

LeetCode 88 — Merge Sorted Array(C++ Java Python)

题目:http://oj.leetcode.com/problems/merge-sorted-array/ Given two sorted integer arrays A and B, mer...

[LeetCode]88.Merge Sorted Array

【题目】 Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode88---Merge Sorted Array(合并有序数组)
举报原因:
原因补充:

(最多只允许输入30个字)