1.题目:牛客网 NC22 (合并两个有序的数组)

描述
给出一个整数数组A和有序的整数数组B,请将数组B合并到数组A中,变成一个有序的升序数组
注意:
1.可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n,A的数组空间大小为m+n
2.不要返回合并的数组,返回是空的,将数组B的数据合并到A里面就好了
3.数组A在[0,m-1]的范围也是有序的例1:
A: [4,5,6,0,0,0],m=3
B: [1,2,3],n=3
合并过后A为:
A: [1,2,3,4,5,6]

2.解题思路(一般解法)

把B数组合并到A数组后,形成新的大小为为m+n的A数组,对新的A数组排序。
此揭发缺点:没有用到A和B皆是升序这个特点。后面排序浪费了时间。

class Solution {public:void merge(int A[], int m, int B[], int n) {for(int i=0;i<n;i++)A[m+i]=B[i];//对A进行排序,冒泡排序;也可直接使用sort对A进行排序int len=m+n;for(int i=0;i<len-1;i++)for(int j=0;j<len-1-i;j++){if(A[j]>A[j+1]){int temp=A[j];A[j]=A[j+1];A[j+1]=temp;}}        }
};

3.解题思路(双指针尾插法)

如图所示,采用3个指针,p1指向A的尾端,即m-1处,p2指向B的尾端,即n-1处。再用一个指针p指向扩容后数组A的m+n-1处。
往左边走,是p1和p2的移动方向。
每次,比较p1和p2所指向的值,大的那一个值,放入p所指向的位置。
需要注意边界条件,比如当A指针的p1走到最边,B指针p2还没走完时,把B剩下的内容按对应位置放入A即可。

代码如下:

class Solution {public:void merge(int A[], int m, int B[], int n) {int p1=m-1,p2=n-1;for(int p=m+n-1;p1>=0&&p2>=0;p--){if(A[p1]>B[p2])A[p]=A[p1--];elseA[p]=B[p2--];}//A指针先走完的情况,B中剩余元素直接copy至A对应位置即可;while(p2>=0){A[p2]=B[p2];p2--;}}
};

思考留个简单小问题,以测试你是否理解了 ):

如代码中,为什么只考虑了A指针先走完的情况,没有考虑B指针先走完的情况?

合并两个有序数组(双指针解题)相关推荐

  1. 数组-合并两个有序数组(双指针,从后往前)

    题意: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 ...

  2. 双指针:88. 合并两个有序数组

    题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序,时间复杂度为O((n+m)log(n+m)) 代码: 快排详解 class Solution {public void merge( ...

  3. 如何快速合并两个有序数组?

    前言 大家好,我是来自于「华为」的「程序员小熊」.今天给大家带来一道与「数组」相关的题目,这道题同时也是字节.微软和亚马逊等互联网大厂的面试题,即力扣上的第 88 题-合并两个有序数组. 本文主要介绍 ...

  4. 合并两个有序数组(双/三指针)

    今天写作业,合并两个有序数组a和b,时间复杂度要求O(n),空间复杂度要求O(1). 很快想到创建第三个数组c,用双指针初始化指向a和b的头元素,每次选择较大者在c上尾插进去之后,再后移相对应a或者b ...

  5. 中数组的合并_【美团面试题】合并两个有序数组

    [美团面试题]合并两个有序数组 题目描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 划重点 初始化 nums1 和 ...

  6. 2. 合并两个有序数组

    2.合并两个有序数组 题目描述 解题思路 代码 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素 ...

  7. 两个数组合并排序python_python算法题---合并两个有序数组

    leetcode-python-合并两个有序数组 今天第一次电话面试,有点紧张,所以自己感觉表现的不是很好,面试过程中面试官问到了两个算法题,都是leecode上面的题目,而且我都做过,但是当时一下子 ...

  8. 88. 合并两个有序数组 JavaScript实现

    88. 合并两个有序数组 1.直接合并后排序 将nms2放到nums1的后面,然后进行排序 var merge = function(nums1, m, nums2, n) {// 将splice将n ...

  9. 算法刷题打卡第11天:合并两个有序数组

    合并两个有序数组 难度:简单 给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你合并 nums2 到 ...

  10. LeetCode——合并两个有序数组

    LeetCode--合并两个有序数组 题目描述: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nu ...

最新文章

  1. 2022-2028年中国SCR脱硝催化剂行业研究及前瞻分析报告
  2. 电商网站数据分析的重要性
  3. Python 数据分析包:pandas 基础
  4. ubuntu笔记:查看Ubuntu的包依赖关系
  5. fork join框架_Java中的Fork / Join框架的简要概述
  6. .net post提交后接收返回数据_读完这一篇IT程序员终于明白post和get的区别
  7. css的三种引入方式 1211
  8. 借助精益找回敏捷的质量
  9. Java Web学习笔记06:利用JDBC访问数据库
  10. centos7安装telnet服务
  11. Windows 11 新功能:管理蓝牙设备将不再困难
  12. c语言代码大全表解释_正点原子Linux第十章C语言版LED灯实验
  13. gtx1050ti最稳定的驱动_最便宜图灵吃鸡卡 华硕GTX 1650评测
  14. 「读懂源码系列3」lodash 是如何实现深拷贝的(上)
  15. 使用SAXReader所需jar包
  16. python 列表去重
  17. 无法打开coursera网站解决方案
  18. 河北滹沱河流域上演喜鹊戏金雕
  19. python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)
  20. 雷塞DMC1380的使用

热门文章

  1. 没有签订书面买卖合同怎么维权
  2. 南约地铁口炳坑村旧改,正在拆除中,京基地产开发。
  3. Maple在数学中的应用详解
  4. tmux工具简单介绍
  5. 第五篇、Callable接口实现多线程
  6. mac 终端修改单个文件名
  7. 期货反向跟单—做到最后
  8. 期货反向跟单--程序化盘口太多
  9. Python实现多键字典
  10. CodeMix使用的语言和框架:JavaScript