前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode12】合并两个有序数组

【LeetCode12】合并两个有序数组

作者头像
Sam Gor
发布2019-07-08 15:16:29
6610
发布2019-07-08 15:16:29
举报
文章被收录于专栏:SAMshare
温故而知新

【LeetCode01】找到字符串中最长的回文字串

【LeetCode02】找出不含重复字符的 最长子串 的长度

【LeetCode03】查找字符串最长公共前缀

【LeetCode04】最接近的三数之和

【LeetCode05】删除排序数组中的重复项

【LeetCode06】反转字符串中的单词

【LeetCode07】旋转矩阵(一)

【LeetCode08】字符串转换整数

【LeetCode09】有效的括号

【LeetCode10】盛最多水的容器

【LeetCode11】反转字符串

今日挑战

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6]

先思考一下,后面我会给出一个解题思路~?

图来自网络

我发现最近做的题目都可以用双指针算法来解决,这道题也一样,我们定义两个指针p1和p2,分别从数组1指定位置(由m决定)和数组2的尾端开始往前遍历。

1 )因为题目说明了,nums1有足够的空间去保存所有nums1和nums2的元素,所以我们假设nums1的空间为m+n

2 )定义一个中间指针p,p从nums1的末端开始往前移动

3 )当nums1[p1]>nums2[p2]的时候,nums1[p]赋值为nums1[p1],否则nums1[p]赋值为nums1[p2],并且,对应的指针(p1或p2)需要往前移动一位,p也移动一位

4 )直到任一指针(p1或p2)移动到了头部(即p1 or p2 小于0),停止迭代

5 )但是这存在一个问题,那就是nums1提前结束,所以nums1的前部分可能有部分元素没有被更新,需要进一步把没有迭代的nums2元素赋值给nums1,这一句话可能有点绕,大家可以看下我大概画的示意图:

Python实现:

代码语言:javascript
复制
def merge(nums1, m, nums2, n):
    p1,p2,p = m-1,n-1,m+n-1
    while (p1>=0) and (p2>=0):
        if nums1[p1]>nums2[p2]:
            nums1[p] = nums1[p1]
            p1-=1
        else:
            nums1[p] = nums2[p2]
            p2-=1
        p-=1
    for k in range(p2,-1,-1):
        nums1[k]=nums2[k]
    return nums1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAMshare 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【LeetCode01】找到字符串中最长的回文字串
  • 【LeetCode02】找出不含重复字符的 最长子串 的长度
  • 【LeetCode04】最接近的三数之和
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档