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];
        }
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

88. Merge Sorted Array [easy] (Python)

题目链接https://leetcode.com/problems/merge-sorted-array/题目原文 Given two sorted integer arrays nums1 an...
  • coder_orz
  • coder_orz
  • 2016年06月15日 13:54
  • 2560

算法--合并两个有序数组

问题:合并两个有序数组。 思路: 1,定义一个新数组,长度是两个数组长度之和。 2,定义三个数组下标索引,用来对数组进行比较。 3,如果两个数组索引有一个小于其对应数组...
  • young_so_nice
  • young_so_nice
  • 2016年04月01日 15:57
  • 1008

合并有序数组(Merging sorted array)

合并有序数组(Merging sorted array) 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 给你两个有序且升序的数组,请你把它们合成一个升序数组并...
  • asakamaarion
  • asakamaarion
  • 2017年10月17日 16:45
  • 44

leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note...
  • xygy8860
  • xygy8860
  • 2015年07月25日 09:45
  • 1015

PHP合并两个有序数组

$arr1 = array(1,2,3,4,5,6,7,8); $arr2 = array(3,4,5,7,9,10); //方法1 function mergeOrderly1($arr1,$arr...
  • u013474436
  • u013474436
  • 2017年03月15日 14:46
  • 774

(每日算法)LeetCode -- Merge Sorted Array (合并有序数组)

Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assum...
  • yapian8
  • yapian8
  • 2015年01月12日 20:42
  • 676

【LeetCode】- Merge Sorted Array (合并有序数组).

[ 问题: ] Given two sorted integer arrays A and B, merge B into A as one sorted array. 直译:给定两个排好序的整形数组...
  • zdp072
  • zdp072
  • 2014年08月28日 14:17
  • 967

基础算法之三: 合并两个有序数组

算法思想:         将两个有序数组合并为一个有序数组,也就是对两个数组中的所有元素进行排序。         与一般排序所不同的是,各个数组都是排好序的,现在要做的是将各个排好序的数组进行归并...
  • shuilan0066
  • shuilan0066
  • 2012年02月17日 16:01
  • 14211

LeetCode 88. Merge Sorted Array(合并有序数组)

原题网址:https://leetcode.com/problems/merge-sorted-array/ Given two sorted integer arrays nums1 and n...
  • jmspan
  • jmspan
  • 2016年05月23日 00:34
  • 249

88. Merge Sorted Array (合并有序数组)

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note...
  • xiangwanpeng
  • xiangwanpeng
  • 2016年10月27日 22:04
  • 93
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode88---Merge Sorted Array(合并有序数组)
举报原因:
原因补充:

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