前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-88-Merge Sorted Array

leetcode-88-Merge Sorted Array

作者头像
chenjx85
发布2019-03-21 16:27:31
3840
发布2019-03-21 16:27:31
举报
文章被收录于专栏:chenjx85的技术专栏

题目描述:

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:

代码语言:javascript
复制
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

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

要完成的函数:

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) 

说明:

1、这道题给定两个vector,nums1和nums2,以及两个整数,m和n,nums1的前m个数是排序好的,nums2的前n个数是排序好的,要求把这m+n个数排好序,放在nums1这个vector中(nums1中有充足的空间来放m+n个数)。

2、明白题意,这道题目不难完成,我们设定两个index,i=m-1,j=n-1,从后面开始比较,如果nums2[j]>=nums1[i],就把nums2[j]的数值放在nums1[i+j+1]中,接着j--。

如果nums2[j]<nums1[i],那么把nums1[i]的数值放在nums1[i+j+1]中,i++。

不断循环,直到i==-1或者j==-1(表示已经处理完其中一个vector了),结束循环。

这部分代码如下:

代码语言:javascript
复制
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) 
    {
        int i=m-1,j=n-1;
        while(j>=0&&i>=0)
        {
            if(nums1[i]>nums2[j])
            {
                nums1[i+j+1]=nums1[i];
                i--;
            }
            else
            {
                nums1[i+j+1]=nums2[j];
                j--;
            }
        }
    }

结束了循环之后,有可能是nums2处理完了,也就是j==-1这种情况,比如nums1=[1,2,5,0,0,0],nums2=[2,3,4],这时候nums1=[1,2,2,3,4,5],我们不需要其他处理,nums1就是我们要的结果。

也有可能是nums1处理完了,nums2还没处理完,比如nums1=[8,9,10,0,0,0],nums2=[1,2,12],上述代码处理完结果是[8,9,8,9,10,12],我们还没有把nums2中的1和2放到nums1中去。

所以完整代码如下:

代码语言:javascript
复制
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) 
    {
        int i=m-1,j=n-1;
        while(j>=0&&i>=0)
        {
            if(nums1[i]>nums2[j])
            {
                nums1[i+j+1]=nums1[i];
                i--;
            }
            else
            {
                nums1[i+j+1]=nums2[j];
                j--;
            }
        }
        if(i==-1)//nums1处理完了,nums2还没处理完
        {
            while(j>=0)
            {
                nums1[i+j+1]=nums2[i+j+1];
                j--;
            }
        }
    }

上述代码实测6ms,beats 99.93% of cpp submissions。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档