今天写作业,合并两个有序数组a和b,时间复杂度要求O(n),空间复杂度要求O(1)。

很快想到创建第三个数组c,用双指针初始化指向a和b的头元素,每次选择较大者在c上尾插进去之后,再后移相对应a或者b上的指针。

public static int[] merge(int[] a, int[] b) {int[] ans = new int[a.length + b.length];int i = 0, j = 0, n = 0;while (i < a.length && j < b.length) {if (a[i] <= b[j]) {ans[n++] = a[i++];}if (a[i] > b[j]) {ans[n++] = b[j++];}while (i < a.length) {ans[n++] = a[i++];}while (j < b.length) {ans[n++] = b[j++];}}return ans;
}

其实有另外一种解法,可以在原数组上操作:

  1. 首先将a扩容,新容量为a的长度加b的长度;
  2. 再把a原数组中的元素、b中的元素,有规律地从扩容后a数组尾部放进去;
  3. 放的过程:三个指针,两个分别指在扩容前后a的尾部(扩容前:p1,扩容后:p),另一个指在b的尾部(p2),然后p1、p2两者取大放入p,每次前移p1或p2(被取了的那个),每次前移p;
  4. 当p2前移到数组外头时(p2<0),a已经成型,合并成功。

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

  1. LeetCode-双指针-88. 合并两个有序数组

    88. 合并两个有序数组 思路:归并排序,一长一短,肯定会有一个先放完,放完后把另一个拷贝过去即可. 为了避免覆盖所以从最后开始向前放最大的元素 class Solution {public:void ...

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

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

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

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

  4. 力扣刷题之合并两个有序数组

    力扣刷题之合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nu ...

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

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

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

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

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

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

  8. Leetcode-D33-数组-66. 加一88. 合并两个有序数组

    一.复习 移除元素-双指针问题,一个指针用来记录下一个扫描哪个元素:另一个指针用来记录下一个写哪里 搜索插入位置-二分法,不断与中间位置的数字比较大小值,缩小区间范围:当两侧只差一个单位时,看val是 ...

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

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

最新文章

  1. MySQL之alter语句用法总结
  2. 专家点评Nat Micro | 朱永群组首次发现特异地切割线性泛素链的全新去泛素化酶...
  3. 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
  4. 大牛告诉你,只有突破程序员思维,才不会沦为码农!
  5. 判断javascript数组的方法
  6. 设置了hover伪类中有cursor:hand但是没有效果
  7. [译] 前端组件设计原则
  8. supersu_SuperSU已从Play商店中删除,这是替代使用的方法
  9. 前端学习(3000):vue+element今日头条管理--封装请求模块
  10. 蒙特卡罗方法介绍(一)
  11. 异步/scrapy想关
  12. RHEL 8 - 用podman compose替代docker compose运行Ansible Tower
  13. 整理的C++面试,这些是最为常见的
  14. java executor 例子_Java中Executor框架的实例
  15. JavaScript模块知识理解
  16. HTML+CSS+JavaScript实现植物大战僵尸(附演示地址)
  17. 蔡学镛:编译、反编译、反反编译(转)
  18. 甲骨文裁员后会打算将云计算作为主战场吗?
  19. 如何批量压缩图片大小?教你3个批量压缩图片的方法
  20. 1125 Chain the Ropes

热门文章

  1. R语言观察日志(part4)--paste函数
  2. python观察日志(part20)--列表中加号,extend,append之间的区别
  3. HTML property 和 attribute 的区别
  4. SAP 电商云 Spartacus UI DeliveryComponent 的依赖设计
  5. SAP UI5 Routing 路由介绍
  6. Angular依赖注入机制的一个错误消息:Error Cannot instantiate cyclic dependency!
  7. SAP Spartacus Category Navigation的accessibility问题
  8. SAP Spartacus界面注册用户获取OAuth Access Token的方式
  9. 使用Angular依赖注入自定义SAP Spartacus的ProductAdapter
  10. 使用xsodata文件将SAP HANA CDS view暴露成OData服务